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 = $(LTLINKOPTS) /NOLOGO /MACHINE:$(PLATFORM)
986LTLIBOPTS = /NOLOGO /MACHINE:$(PLATFORM)
987!ELSE
988LTLINKOPTS = $(LTLINKOPTS) /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 date.lo dbstat.lo delete.lo \
1095         expr.lo fault.lo fkey.lo \
1096         fts3.lo fts3_aux.lo fts3_expr.lo fts3_hash.lo fts3_icu.lo \
1097         fts3_porter.lo fts3_snippet.lo fts3_tokenizer.lo fts3_tokenizer1.lo \
1098         fts3_tokenize_vtab.lo fts3_unicode.lo fts3_unicode2.lo fts3_write.lo \
1099         fts5.lo \
1100         func.lo global.lo hash.lo \
1101         icu.lo insert.lo legacy.lo loadext.lo \
1102         main.lo malloc.lo mem0.lo mem1.lo mem2.lo mem3.lo mem5.lo \
1103         memjournal.lo \
1104         mutex.lo mutex_noop.lo mutex_unix.lo mutex_w32.lo \
1105         notify.lo opcodes.lo os.lo os_unix.lo os_win.lo \
1106         pager.lo pcache.lo pcache1.lo pragma.lo prepare.lo printf.lo \
1107         random.lo resolve.lo rowset.lo rtree.lo \
1108         sqlite3session.lo select.lo sqlite3rbu.lo status.lo \
1109         table.lo threads.lo tokenize.lo treeview.lo trigger.lo \
1110         update.lo util.lo vacuum.lo \
1111         vdbeapi.lo vdbeaux.lo vdbeblob.lo vdbemem.lo vdbesort.lo \
1112         vdbetrace.lo wal.lo walker.lo where.lo wherecode.lo whereexpr.lo \
1113         utf.lo vtab.lo
1114# <</mark>>
1115
1116# Object files for the amalgamation.
1117#
1118LIBOBJS1 = sqlite3.lo
1119
1120# Determine the real value of LIBOBJ based on the 'configure' script
1121#
1122# <<mark>>
1123!IF $(USE_AMALGAMATION)==0
1124LIBOBJ = $(LIBOBJS0)
1125!ELSE
1126# <</mark>>
1127LIBOBJ = $(LIBOBJS1)
1128# <<mark>>
1129!ENDIF
1130# <</mark>>
1131
1132# Determine if embedded resource compilation and usage are enabled.
1133#
1134!IF $(USE_RC)!=0
1135LIBRESOBJS = sqlite3res.lo
1136!ELSE
1137LIBRESOBJS =
1138!ENDIF
1139
1140# <<mark>>
1141# Core source code files, part 1.
1142#
1143SRC00 = \
1144	$(TOP)\src\crypto.c \
1145	$(TOP)\src\crypto_cc.c \
1146	$(TOP)\src\crypto_impl.c \
1147	$(TOP)\src\crypto_libtomcrypt.c \
1148	$(TOP)\src\crypto_openssl.c \
1149	$(TOP)\src\crypto.h \
1150	$(TOP)\src\sqlcipher.h \
1151  $(TOP)\src\alter.c \
1152  $(TOP)\src\analyze.c \
1153  $(TOP)\src\attach.c \
1154  $(TOP)\src\auth.c \
1155  $(TOP)\src\backup.c \
1156  $(TOP)\src\bitvec.c \
1157  $(TOP)\src\btmutex.c \
1158  $(TOP)\src\btree.c \
1159  $(TOP)\src\build.c \
1160  $(TOP)\src\callback.c \
1161  $(TOP)\src\complete.c \
1162  $(TOP)\src\ctime.c \
1163  $(TOP)\src\date.c \
1164  $(TOP)\src\dbstat.c \
1165  $(TOP)\src\delete.c \
1166  $(TOP)\src\expr.c \
1167  $(TOP)\src\fault.c \
1168  $(TOP)\src\fkey.c \
1169  $(TOP)\src\func.c \
1170  $(TOP)\src\global.c \
1171  $(TOP)\src\hash.c \
1172  $(TOP)\src\insert.c \
1173  $(TOP)\src\legacy.c \
1174  $(TOP)\src\loadext.c \
1175  $(TOP)\src\main.c \
1176  $(TOP)\src\malloc.c \
1177  $(TOP)\src\mem0.c \
1178  $(TOP)\src\mem1.c \
1179  $(TOP)\src\mem2.c \
1180  $(TOP)\src\mem3.c \
1181  $(TOP)\src\mem5.c \
1182  $(TOP)\src\memjournal.c \
1183  $(TOP)\src\mutex.c \
1184  $(TOP)\src\mutex_noop.c \
1185  $(TOP)\src\mutex_unix.c \
1186  $(TOP)\src\mutex_w32.c \
1187  $(TOP)\src\notify.c \
1188  $(TOP)\src\os.c \
1189  $(TOP)\src\os_unix.c \
1190  $(TOP)\src\os_win.c
1191
1192# Core source code files, part 2.
1193#
1194SRC01 = \
1195  $(TOP)\src\pager.c \
1196  $(TOP)\src\pcache.c \
1197  $(TOP)\src\pcache1.c \
1198  $(TOP)\src\pragma.c \
1199  $(TOP)\src\prepare.c \
1200  $(TOP)\src\printf.c \
1201  $(TOP)\src\random.c \
1202  $(TOP)\src\resolve.c \
1203  $(TOP)\src\rowset.c \
1204  $(TOP)\src\select.c \
1205  $(TOP)\src\status.c \
1206  $(TOP)\src\table.c \
1207  $(TOP)\src\threads.c \
1208  $(TOP)\src\tclsqlite.c \
1209  $(TOP)\src\tokenize.c \
1210  $(TOP)\src\treeview.c \
1211  $(TOP)\src\trigger.c \
1212  $(TOP)\src\utf.c \
1213  $(TOP)\src\update.c \
1214  $(TOP)\src\util.c \
1215  $(TOP)\src\vacuum.c \
1216  $(TOP)\src\vdbe.c \
1217  $(TOP)\src\vdbeapi.c \
1218  $(TOP)\src\vdbeaux.c \
1219  $(TOP)\src\vdbeblob.c \
1220  $(TOP)\src\vdbemem.c \
1221  $(TOP)\src\vdbesort.c \
1222  $(TOP)\src\vdbetrace.c \
1223  $(TOP)\src\vtab.c \
1224  $(TOP)\src\wal.c \
1225  $(TOP)\src\walker.c \
1226  $(TOP)\src\where.c \
1227  $(TOP)\src\wherecode.c \
1228  $(TOP)\src\whereexpr.c
1229
1230# Shell source code files.
1231#
1232SRC02 = \
1233  $(TOP)\src\shell.c
1234
1235# Core miscellaneous files.
1236#
1237SRC03 = \
1238  $(TOP)\src\parse.y
1239
1240# Core header files, part 1.
1241#
1242SRC04 = \
1243  $(TOP)\src\btree.h \
1244  $(TOP)\src\btreeInt.h \
1245  $(TOP)\src\hash.h \
1246  $(TOP)\src\hwtime.h \
1247  $(TOP)\src\msvc.h \
1248  $(TOP)\src\mutex.h \
1249  $(TOP)\src\os.h \
1250  $(TOP)\src\os_common.h \
1251  $(TOP)\src\os_setup.h \
1252  $(TOP)\src\os_win.h
1253
1254# Core header files, part 2.
1255#
1256SRC05 = \
1257  $(TOP)\src\pager.h \
1258  $(TOP)\src\pcache.h \
1259  $(TOP)\src\pragma.h \
1260  $(TOP)\src\sqlite.h.in \
1261  $(TOP)\src\sqlite3ext.h \
1262  $(TOP)\src\sqliteInt.h \
1263  $(TOP)\src\sqliteLimit.h \
1264  $(TOP)\src\vdbe.h \
1265  $(TOP)\src\vdbeInt.h \
1266  $(TOP)\src\vxworks.h \
1267  $(TOP)\src\wal.h \
1268  $(TOP)\src\whereInt.h
1269
1270# Extension source code files, part 1.
1271#
1272SRC06 = \
1273  $(TOP)\ext\fts1\fts1.c \
1274  $(TOP)\ext\fts1\fts1_hash.c \
1275  $(TOP)\ext\fts1\fts1_porter.c \
1276  $(TOP)\ext\fts1\fts1_tokenizer1.c \
1277  $(TOP)\ext\fts2\fts2.c \
1278  $(TOP)\ext\fts2\fts2_hash.c \
1279  $(TOP)\ext\fts2\fts2_icu.c \
1280  $(TOP)\ext\fts2\fts2_porter.c \
1281  $(TOP)\ext\fts2\fts2_tokenizer.c \
1282  $(TOP)\ext\fts2\fts2_tokenizer1.c
1283
1284# Extension source code files, part 2.
1285#
1286SRC07 = \
1287  $(TOP)\ext\fts3\fts3.c \
1288  $(TOP)\ext\fts3\fts3_aux.c \
1289  $(TOP)\ext\fts3\fts3_expr.c \
1290  $(TOP)\ext\fts3\fts3_hash.c \
1291  $(TOP)\ext\fts3\fts3_icu.c \
1292  $(TOP)\ext\fts3\fts3_porter.c \
1293  $(TOP)\ext\fts3\fts3_snippet.c \
1294  $(TOP)\ext\fts3\fts3_tokenizer.c \
1295  $(TOP)\ext\fts3\fts3_tokenizer1.c \
1296  $(TOP)\ext\fts3\fts3_tokenize_vtab.c \
1297  $(TOP)\ext\fts3\fts3_unicode.c \
1298  $(TOP)\ext\fts3\fts3_unicode2.c \
1299  $(TOP)\ext\fts3\fts3_write.c \
1300  $(TOP)\ext\icu\icu.c \
1301  $(TOP)\ext\rtree\rtree.c \
1302  $(TOP)\ext\session\sqlite3session.c \
1303  $(TOP)\ext\rbu\sqlite3rbu.c \
1304  $(TOP)\ext\misc\json1.c \
1305  $(TOP)\ext\misc\stmt.c
1306
1307# Extension header files, part 1.
1308#
1309SRC08 = \
1310  $(TOP)\ext\fts1\fts1.h \
1311  $(TOP)\ext\fts1\fts1_hash.h \
1312  $(TOP)\ext\fts1\fts1_tokenizer.h \
1313  $(TOP)\ext\fts2\fts2.h \
1314  $(TOP)\ext\fts2\fts2_hash.h \
1315  $(TOP)\ext\fts2\fts2_tokenizer.h
1316
1317# Extension header files, part 2.
1318#
1319SRC09 = \
1320  $(TOP)\ext\fts3\fts3.h \
1321  $(TOP)\ext\fts3\fts3Int.h \
1322  $(TOP)\ext\fts3\fts3_hash.h \
1323  $(TOP)\ext\fts3\fts3_tokenizer.h \
1324  $(TOP)\ext\icu\sqliteicu.h \
1325  $(TOP)\ext\rtree\rtree.h \
1326  $(TOP)\ext\rbu\sqlite3rbu.h \
1327  $(TOP)\ext\session\sqlite3session.h
1328
1329# Generated source code files
1330#
1331SRC10 = \
1332  opcodes.c \
1333  parse.c
1334
1335# Generated header files
1336#
1337SRC11 = \
1338  keywordhash.h \
1339  opcodes.h \
1340  parse.h \
1341  $(SQLITE3H)
1342
1343# Generated Tcl header files
1344#
1345!IF $(USE_STDCALL)!=0 || $(FOR_WIN10)!=0
1346SRC12 = \
1347  $(SQLITETCLH) \
1348  $(SQLITETCLDECLSH)
1349!ELSE
1350SRC12 =
1351!ENDIF
1352
1353# All source code files.
1354#
1355SRC = $(SRC00) $(SRC01) $(SRC02) $(SRC03) $(SRC04) $(SRC05) $(SRC06) $(SRC07) $(SRC08) $(SRC09) $(SRC10) $(SRC11)
1356
1357# Source code to the test files.
1358#
1359TESTSRC = \
1360  $(TOP)\src\test1.c \
1361  $(TOP)\src\test2.c \
1362  $(TOP)\src\test3.c \
1363  $(TOP)\src\test4.c \
1364  $(TOP)\src\test5.c \
1365  $(TOP)\src\test6.c \
1366  $(TOP)\src\test7.c \
1367  $(TOP)\src\test8.c \
1368  $(TOP)\src\test9.c \
1369  $(TOP)\src\test_autoext.c \
1370  $(TOP)\src\test_async.c \
1371  $(TOP)\src\test_backup.c \
1372  $(TOP)\src\test_bestindex.c \
1373  $(TOP)\src\test_blob.c \
1374  $(TOP)\src\test_btree.c \
1375  $(TOP)\src\test_config.c \
1376  $(TOP)\src\test_delete.c \
1377  $(TOP)\src\test_demovfs.c \
1378  $(TOP)\src\test_devsym.c \
1379  $(TOP)\src\test_fs.c \
1380  $(TOP)\src\test_func.c \
1381  $(TOP)\src\test_hexio.c \
1382  $(TOP)\src\test_init.c \
1383  $(TOP)\src\test_intarray.c \
1384  $(TOP)\src\test_journal.c \
1385  $(TOP)\src\test_malloc.c \
1386  $(TOP)\src\test_multiplex.c \
1387  $(TOP)\src\test_mutex.c \
1388  $(TOP)\src\test_onefile.c \
1389  $(TOP)\src\test_osinst.c \
1390  $(TOP)\src\test_pcache.c \
1391  $(TOP)\src\test_quota.c \
1392  $(TOP)\src\test_rtree.c \
1393  $(TOP)\src\test_schema.c \
1394  $(TOP)\src\test_server.c \
1395  $(TOP)\src\test_superlock.c \
1396  $(TOP)\src\test_syscall.c \
1397  $(TOP)\src\test_tclvar.c \
1398  $(TOP)\src\test_thread.c \
1399  $(TOP)\src\test_vfs.c \
1400  $(TOP)\src\test_windirent.c \
1401  $(TOP)\src\test_wsd.c \
1402  $(TOP)\ext\fts3\fts3_term.c \
1403  $(TOP)\ext\fts3\fts3_test.c \
1404  $(TOP)\ext\rbu\test_rbu.c \
1405  $(TOP)\ext\session\test_session.c
1406
1407# Statically linked extensions.
1408#
1409TESTEXT = \
1410  $(TOP)\ext\misc\amatch.c \
1411  $(TOP)\ext\misc\carray.c \
1412  $(TOP)\ext\misc\closure.c \
1413  $(TOP)\ext\misc\csv.c \
1414  $(TOP)\ext\misc\eval.c \
1415  $(TOP)\ext\misc\fileio.c \
1416  $(TOP)\ext\misc\fuzzer.c \
1417  $(TOP)\ext\fts5\fts5_tcl.c \
1418  $(TOP)\ext\fts5\fts5_test_mi.c \
1419  $(TOP)\ext\fts5\fts5_test_tok.c \
1420  $(TOP)\ext\misc\ieee754.c \
1421  $(TOP)\ext\misc\nextchar.c \
1422  $(TOP)\ext\misc\percentile.c \
1423  $(TOP)\ext\misc\regexp.c \
1424  $(TOP)\ext\misc\remember.c \
1425  $(TOP)\ext\misc\series.c \
1426  $(TOP)\ext\misc\spellfix.c \
1427  $(TOP)\ext\misc\totype.c \
1428  $(TOP)\ext\misc\unionvtab.c \
1429  $(TOP)\ext\misc\wholenumber.c
1430
1431# Source code to the library files needed by the test fixture
1432# (non-amalgamation)
1433#
1434TESTSRC2 = \
1435  $(SRC00) \
1436  $(SRC01) \
1437  $(SRC06) \
1438  $(SRC07) \
1439  $(SRC10) \
1440  $(TOP)\ext\async\sqlite3async.c
1441
1442# Header files used by all library source files.
1443#
1444HDR = \
1445   $(TOP)\src\btree.h \
1446   $(TOP)\src\btreeInt.h \
1447   $(TOP)\src\hash.h \
1448   $(TOP)\src\hwtime.h \
1449   keywordhash.h \
1450   $(TOP)\src\msvc.h \
1451   $(TOP)\src\mutex.h \
1452   opcodes.h \
1453   $(TOP)\src\os.h \
1454   $(TOP)\src\os_common.h \
1455   $(TOP)\src\os_setup.h \
1456   $(TOP)\src\os_win.h \
1457   $(TOP)\src\pager.h \
1458   $(TOP)\src\pcache.h \
1459   parse.h \
1460   $(TOP)\src\pragma.h \
1461   $(SQLITE3H) \
1462   sqlite3ext.h \
1463   $(TOP)\src\sqliteInt.h \
1464   $(TOP)\src\sqliteLimit.h \
1465   $(TOP)\src\vdbe.h \
1466   $(TOP)\src\vdbeInt.h \
1467   $(TOP)\src\vxworks.h \
1468   $(TOP)\src\whereInt.h
1469
1470# Header files used by extensions
1471#
1472EXTHDR = $(EXTHDR) \
1473  $(TOP)\ext\fts1\fts1.h \
1474  $(TOP)\ext\fts1\fts1_hash.h \
1475  $(TOP)\ext\fts1\fts1_tokenizer.h
1476EXTHDR = $(EXTHDR) \
1477  $(TOP)\ext\fts2\fts2.h \
1478  $(TOP)\ext\fts2\fts2_hash.h \
1479  $(TOP)\ext\fts2\fts2_tokenizer.h
1480EXTHDR = $(EXTHDR) \
1481  $(TOP)\ext\fts3\fts3.h \
1482  $(TOP)\ext\fts3\fts3Int.h \
1483  $(TOP)\ext\fts3\fts3_hash.h \
1484  $(TOP)\ext\fts3\fts3_tokenizer.h
1485EXTHDR = $(EXTHDR) \
1486  $(TOP)\ext\rtree\rtree.h
1487EXTHDR = $(EXTHDR) \
1488  $(TOP)\ext\icu\sqliteicu.h
1489EXTHDR = $(EXTHDR) \
1490  $(TOP)\ext\rtree\sqlite3rtree.h
1491EXTHDR = $(EXTHDR) \
1492  $(TOP)\ext\session\sqlite3session.h
1493
1494# executables needed for testing
1495#
1496TESTPROGS = \
1497  testfixture.exe \
1498  $(SQLITE3EXE) \
1499  sqlite3_analyzer.exe \
1500  sqldiff.exe \
1501  dbhash.exe
1502
1503# Databases containing fuzzer test cases
1504#
1505FUZZDATA = \
1506  $(TOP)\test\fuzzdata1.db \
1507  $(TOP)\test\fuzzdata2.db \
1508  $(TOP)\test\fuzzdata3.db \
1509  $(TOP)\test\fuzzdata4.db \
1510  $(TOP)\test\fuzzdata5.db
1511# <</mark>>
1512
1513# Additional compiler options for the shell.  These are only effective
1514# when the shell is not being dynamically linked.
1515#
1516!IF $(DYNAMIC_SHELL)==0 && $(FOR_WIN10)==0
1517SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_SHELL_JSON1 -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_STMTVTAB
1518!ENDIF
1519
1520# <<mark>>
1521# Extra compiler options for various test tools.
1522#
1523MPTESTER_COMPILE_OPTS = -DSQLITE_SHELL_JSON1 -DSQLITE_ENABLE_FTS5
1524FUZZERSHELL_COMPILE_OPTS = -DSQLITE_ENABLE_JSON1
1525FUZZCHECK_COMPILE_OPTS = -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_MEMSYS5 -DSQLITE_OSS_FUZZ -DSQLITE_MAX_MEMORY=50000000
1526FUZZCHECK_SRC = $(TOP)\test\fuzzcheck.c $(TOP)\test\ossfuzz.c
1527OSSSHELL_SRC = $(TOP)\test\ossshell.c $(TOP)\test\ossfuzz.c
1528DBFUZZ_COMPILE_OPTS = -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION
1529KV_COMPILE_OPTS = -DSQLITE_THREADSAFE=0 -DSQLITE_DIRECT_OVERFLOW_READ
1530DBSELFTEST_COMPILE_OPTS = -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS5
1531ST_COMPILE_OPTS = -DSQLITE_THREADSAFE=0
1532
1533# Standard options to testfixture.
1534#
1535TESTOPTS = --verbose=file --output=test-out.txt
1536
1537# Extra targets for the "all" target that require Tcl.
1538#
1539!IF $(NO_TCL)==0
1540ALL_TCL_TARGETS = libtclsqlite3.lib
1541!ELSE
1542ALL_TCL_TARGETS =
1543!ENDIF
1544# <</mark>>
1545
1546# This is the default Makefile target.  The objects listed here
1547# are what get build when you type just "make" with no arguments.
1548#
1549all:	dll libsqlite3.lib shell $(ALL_TCL_TARGETS)
1550
1551# Dynamic link library section.
1552#
1553dll:	$(SQLITE3DLL)
1554
1555# Shell executable.
1556#
1557shell:	$(SQLITE3EXE)
1558
1559# <<mark>>
1560libsqlite3.lib:	$(LIBOBJ)
1561	$(LTLIB) $(LTLIBOPTS) /OUT:$@ $(LIBOBJ) $(TLIBS)
1562
1563libtclsqlite3.lib:	tclsqlite.lo libsqlite3.lib
1564	$(LTLIB) $(LTLIBOPTS) $(LTLIBPATHS) /OUT:$@ tclsqlite.lo libsqlite3.lib $(LIBTCLSTUB) $(TLIBS)
1565# <</mark>>
1566
1567$(SQLITE3DLL):	$(LIBOBJ) $(LIBRESOBJS) $(CORE_LINK_DEP)
1568	$(LD) $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) /DLL $(CORE_LINK_OPTS) /OUT:$@ $(LIBOBJ) $(LIBRESOBJS) $(LTLIBS) $(TLIBS)
1569
1570# <<block2>>
1571sqlite3.def:	libsqlite3.lib
1572	echo EXPORTS > sqlite3.def
1573	dumpbin /all libsqlite3.lib \
1574		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl include "^\s+1 _?(sqlite3(?:session|changeset|changegroup)?_[^@]*)(?:@\d+)?$$" \1 \
1575		| sort >> sqlite3.def
1576# <</block2>>
1577
1578$(SQLITE3EXE):	$(TOP)\src\shell.c $(SHELL_CORE_DEP) $(LIBRESOBJS) $(SHELL_CORE_SRC) $(SQLITE3H)
1579	$(LTLINK) $(SHELL_COMPILE_OPTS) $(READLINE_FLAGS) $(TOP)\src\shell.c $(SHELL_CORE_SRC) \
1580		/link $(SQLITE3EXEPDB) $(LDFLAGS) $(LTLINKOPTS) $(SHELL_LINK_OPTS) $(LTLIBPATHS) $(LIBRESOBJS) $(LIBREADLINE) $(LTLIBS) $(TLIBS)
1581
1582# <<mark>>
1583sqldiff.exe:	$(TOP)\tool\sqldiff.c $(SQLITE3C) $(SQLITE3H)
1584	$(LTLINK) $(NO_WARN) $(TOP)\tool\sqldiff.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
1585
1586dbhash.exe:	$(TOP)\tool\dbhash.c $(SQLITE3C) $(SQLITE3H)
1587	$(LTLINK) $(NO_WARN) $(TOP)\tool\dbhash.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
1588
1589scrub.exe:	$(TOP)\ext\misc\scrub.c $(SQLITE3C) $(SQLITE3H)
1590	$(LTLINK) $(NO_WARN) $(TOP)\ext\misc\scrub.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
1591
1592srcck1.exe:	$(TOP)\tool\srcck1.c
1593	$(BCC) $(NO_WARN) -Fe$@ $(TOP)\tool\srcck1.c
1594
1595sourcetest:	srcck1.exe sqlite3.c
1596	srcck1.exe sqlite3.c
1597
1598fuzzershell.exe:	$(TOP)\tool\fuzzershell.c $(SQLITE3C) $(SQLITE3H)
1599	$(LTLINK) $(NO_WARN) $(FUZZERSHELL_COMPILE_OPTS) $(TOP)\tool\fuzzershell.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
1600
1601dbfuzz.exe:	$(TOP)\test\dbfuzz.c $(SQLITE3C) $(SQLITE3H)
1602	$(LTLINK) $(NO_WARN) $(DBFUZZ_COMPILE_OPTS) $(TOP)\test\dbfuzz.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
1603
1604fuzzcheck.exe:	$(FUZZCHECK_SRC) $(SQLITE3C) $(SQLITE3H)
1605	$(LTLINK) $(NO_WARN) $(FUZZCHECK_COMPILE_OPTS) $(FUZZCHECK_SRC) $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
1606
1607ossshell.exe:	$(OSSSHELL_SRC) $(SQLITE3C) $(SQLITE3H)
1608	$(LTLINK) $(NO_WARN) $(FUZZCHECK_COMPILE_OPTS) $(OSSSHELL_SRC) $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
1609
1610mptester.exe:	$(TOP)\mptest\mptest.c $(SQLITE3C) $(SQLITE3H)
1611	$(LTLINK) $(NO_WARN) $(MPTESTER_COMPILE_OPTS) $(TOP)\mptest\mptest.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
1612
1613MPTEST1 = mptester mptest.db $(TOP)\mptest\crash01.test --repeat 20
1614MPTEST2 = mptester mptest.db $(TOP)\mptest\multiwrite01.test --repeat 20
1615
1616mptest:	mptester.exe
1617	del /Q mptest.db 2>NUL
1618	$(MPTEST1) --journalmode DELETE
1619	$(MPTEST2) --journalmode WAL
1620	$(MPTEST1) --journalmode WAL
1621	$(MPTEST2) --journalmode PERSIST
1622	$(MPTEST1) --journalmode PERSIST
1623	$(MPTEST2) --journalmode TRUNCATE
1624	$(MPTEST1) --journalmode TRUNCATE
1625	$(MPTEST2) --journalmode DELETE
1626
1627# This target creates a directory named "tsrc" and fills it with
1628# copies of all of the C source code and header files needed to
1629# build on the target system.  Some of the C source code and header
1630# files are automatically generated.  This target takes care of
1631# all that automatic generation.
1632#
1633.target_source:	$(SRC) $(TOP)\tool\vdbe-compress.tcl fts5.c $(SQLITE_TCL_DEP)
1634	-rmdir /Q/S tsrc 2>NUL
1635	-mkdir tsrc
1636	for %i in ($(SRC00)) do copy /Y %i tsrc
1637	for %i in ($(SRC01)) do copy /Y %i tsrc
1638	for %i in ($(SRC02)) do copy /Y %i tsrc
1639	for %i in ($(SRC03)) do copy /Y %i tsrc
1640	for %i in ($(SRC04)) do copy /Y %i tsrc
1641	for %i in ($(SRC05)) do copy /Y %i tsrc
1642	for %i in ($(SRC06)) do copy /Y %i tsrc
1643	for %i in ($(SRC07)) do copy /Y %i tsrc
1644	for %i in ($(SRC08)) do copy /Y %i tsrc
1645	for %i in ($(SRC09)) do copy /Y %i tsrc
1646	for %i in ($(SRC10)) do copy /Y %i tsrc
1647	for %i in ($(SRC11)) do copy /Y %i tsrc
1648	for %i in ($(SRC12)) do copy /Y %i tsrc
1649	copy /Y fts5.c tsrc
1650	copy /Y fts5.h tsrc
1651	del /Q tsrc\sqlite.h.in tsrc\parse.y 2>NUL
1652	$(TCLSH_CMD) $(TOP)\tool\vdbe-compress.tcl $(OPTS) < tsrc\vdbe.c > vdbe.new
1653	move vdbe.new tsrc\vdbe.c
1654	echo > .target_source
1655
1656sqlite3.c:	.target_source sqlite3ext.h $(MKSQLITE3C_TOOL)
1657	$(TCLSH_CMD) $(MKSQLITE3C_TOOL) $(MKSQLITE3C_ARGS)
1658	copy tsrc\shell.c .
1659	copy $(TOP)\ext\session\sqlite3session.h .
1660
1661sqlite3-all.c:	sqlite3.c $(TOP)\tool\split-sqlite3c.tcl
1662	$(TCLSH_CMD) $(TOP)\tool\split-sqlite3c.tcl
1663# <</mark>>
1664
1665# Rule to build the amalgamation
1666#
1667sqlite3.lo:	$(SQLITE3C)
1668	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(SQLITE3C)
1669
1670# <<mark>>
1671# Rules to build the LEMON compiler generator
1672#
1673lempar.c:	$(TOP)\tool\lempar.c
1674	copy $(TOP)\tool\lempar.c .
1675
1676lemon.exe:	$(TOP)\tool\lemon.c lempar.c
1677	$(BCC) $(NO_WARN) -Daccess=_access \
1678		-Fe$@ $(TOP)\tool\lemon.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
1750dbstat.lo:	$(TOP)\src\date.c $(HDR)
1751	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\dbstat.c
1752
1753delete.lo:	$(TOP)\src\delete.c $(HDR)
1754	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\delete.c
1755
1756expr.lo:	$(TOP)\src\expr.c $(HDR)
1757	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\expr.c
1758
1759fault.lo:	$(TOP)\src\fault.c $(HDR)
1760	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\fault.c
1761
1762fkey.lo:	$(TOP)\src\fkey.c $(HDR)
1763	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\fkey.c
1764
1765func.lo:	$(TOP)\src\func.c $(HDR)
1766	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\func.c
1767
1768global.lo:	$(TOP)\src\global.c $(HDR)
1769	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\global.c
1770
1771hash.lo:	$(TOP)\src\hash.c $(HDR)
1772	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\hash.c
1773
1774insert.lo:	$(TOP)\src\insert.c $(HDR)
1775	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\insert.c
1776
1777legacy.lo:	$(TOP)\src\legacy.c $(HDR)
1778	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\legacy.c
1779
1780loadext.lo:	$(TOP)\src\loadext.c $(HDR)
1781	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\loadext.c
1782
1783main.lo:	$(TOP)\src\main.c $(HDR)
1784	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\main.c
1785
1786malloc.lo:	$(TOP)\src\malloc.c $(HDR)
1787	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\malloc.c
1788
1789mem0.lo:	$(TOP)\src\mem0.c $(HDR)
1790	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mem0.c
1791
1792mem1.lo:	$(TOP)\src\mem1.c $(HDR)
1793	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mem1.c
1794
1795mem2.lo:	$(TOP)\src\mem2.c $(HDR)
1796	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mem2.c
1797
1798mem3.lo:	$(TOP)\src\mem3.c $(HDR)
1799	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mem3.c
1800
1801mem5.lo:	$(TOP)\src\mem5.c $(HDR)
1802	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mem5.c
1803
1804memjournal.lo:	$(TOP)\src\memjournal.c $(HDR)
1805	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\memjournal.c
1806
1807mutex.lo:	$(TOP)\src\mutex.c $(HDR)
1808	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mutex.c
1809
1810mutex_noop.lo:	$(TOP)\src\mutex_noop.c $(HDR)
1811	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mutex_noop.c
1812
1813mutex_unix.lo:	$(TOP)\src\mutex_unix.c $(HDR)
1814	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mutex_unix.c
1815
1816mutex_w32.lo:	$(TOP)\src\mutex_w32.c $(HDR)
1817	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mutex_w32.c
1818
1819notify.lo:	$(TOP)\src\notify.c $(HDR)
1820	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\notify.c
1821
1822pager.lo:	$(TOP)\src\pager.c $(HDR) $(TOP)\src\pager.h
1823	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\pager.c
1824
1825pcache.lo:	$(TOP)\src\pcache.c $(HDR) $(TOP)\src\pcache.h
1826	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\pcache.c
1827
1828pcache1.lo:	$(TOP)\src\pcache1.c $(HDR) $(TOP)\src\pcache.h
1829	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\pcache1.c
1830
1831os.lo:	$(TOP)\src\os.c $(HDR)
1832	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\os.c
1833
1834os_unix.lo:	$(TOP)\src\os_unix.c $(HDR)
1835	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\os_unix.c
1836
1837os_win.lo:	$(TOP)\src\os_win.c $(HDR)
1838	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\os_win.c
1839
1840pragma.lo:	$(TOP)\src\pragma.c $(HDR)
1841	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\pragma.c
1842
1843prepare.lo:	$(TOP)\src\prepare.c $(HDR)
1844	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\prepare.c
1845
1846printf.lo:	$(TOP)\src\printf.c $(HDR)
1847	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\printf.c
1848
1849random.lo:	$(TOP)\src\random.c $(HDR)
1850	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\random.c
1851
1852resolve.lo:	$(TOP)\src\resolve.c $(HDR)
1853	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\resolve.c
1854
1855rowset.lo:	$(TOP)\src\rowset.c $(HDR)
1856	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\rowset.c
1857
1858select.lo:	$(TOP)\src\select.c $(HDR)
1859	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\select.c
1860
1861status.lo:	$(TOP)\src\status.c $(HDR)
1862	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\status.c
1863
1864table.lo:	$(TOP)\src\table.c $(HDR)
1865	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\table.c
1866
1867threads.lo:	$(TOP)\src\threads.c $(HDR)
1868	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\threads.c
1869
1870tokenize.lo:	$(TOP)\src\tokenize.c keywordhash.h $(HDR)
1871	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\tokenize.c
1872
1873treeview.lo:	$(TOP)\src\treeview.c $(HDR)
1874	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\treeview.c
1875
1876trigger.lo:	$(TOP)\src\trigger.c $(HDR)
1877	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\trigger.c
1878
1879update.lo:	$(TOP)\src\update.c $(HDR)
1880	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\update.c
1881
1882utf.lo:	$(TOP)\src\utf.c $(HDR)
1883	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\utf.c
1884
1885util.lo:	$(TOP)\src\util.c $(HDR)
1886	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\util.c
1887
1888vacuum.lo:	$(TOP)\src\vacuum.c $(HDR)
1889	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vacuum.c
1890
1891vdbe.lo:	$(TOP)\src\vdbe.c $(HDR)
1892	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbe.c
1893
1894vdbeapi.lo:	$(TOP)\src\vdbeapi.c $(HDR)
1895	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbeapi.c
1896
1897vdbeaux.lo:	$(TOP)\src\vdbeaux.c $(HDR)
1898	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbeaux.c
1899
1900vdbeblob.lo:	$(TOP)\src\vdbeblob.c $(HDR)
1901	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbeblob.c
1902
1903vdbemem.lo:	$(TOP)\src\vdbemem.c $(HDR)
1904	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbemem.c
1905
1906vdbesort.lo:	$(TOP)\src\vdbesort.c $(HDR)
1907	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbesort.c
1908
1909vdbetrace.lo:	$(TOP)\src\vdbetrace.c $(HDR)
1910	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbetrace.c
1911
1912vtab.lo:	$(TOP)\src\vtab.c $(HDR)
1913	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vtab.c
1914
1915wal.lo:	$(TOP)\src\wal.c $(HDR)
1916	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\wal.c
1917
1918walker.lo:	$(TOP)\src\walker.c $(HDR)
1919	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\walker.c
1920
1921where.lo:	$(TOP)\src\where.c $(HDR)
1922	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\where.c
1923
1924wherecode.lo:	$(TOP)\src\wherecode.c $(HDR)
1925	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\wherecode.c
1926
1927whereexpr.lo:	$(TOP)\src\whereexpr.c $(HDR)
1928	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\whereexpr.c
1929
1930tclsqlite.lo:	$(TOP)\src\tclsqlite.c $(HDR) $(SQLITE_TCL_DEP)
1931	$(LTCOMPILE) $(NO_WARN) -DUSE_TCL_STUBS=1 -DBUILD_sqlite -I$(TCLINCDIR) -c $(TOP)\src\tclsqlite.c
1932
1933tclsqlite-shell.lo:	$(TOP)\src\tclsqlite.c $(HDR) $(SQLITE_TCL_DEP)
1934	$(LTCOMPILE) $(NO_WARN) -DTCLSH=1 -DBUILD_sqlite -I$(TCLINCDIR) -c $(TOP)\src\tclsqlite.c
1935
1936tclsqlite3.exe:	tclsqlite-shell.lo $(SQLITE3C) $(SQLITE3H) $(LIBRESOBJS)
1937	$(LTLINK) $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) /OUT:$@ tclsqlite-shell.lo $(LIBRESOBJS) $(LTLIBS) $(TLIBS)
1938
1939# Rules to build opcodes.c and opcodes.h
1940#
1941opcodes.c:	opcodes.h $(TOP)\tool\mkopcodec.tcl
1942	$(TCLSH_CMD) $(TOP)\tool\mkopcodec.tcl opcodes.h > opcodes.c
1943
1944opcodes.h:	parse.h $(TOP)\src\vdbe.c $(TOP)\tool\mkopcodeh.tcl
1945	type parse.h $(TOP)\src\vdbe.c | $(TCLSH_CMD) $(TOP)\tool\mkopcodeh.tcl > opcodes.h
1946
1947# Rules to build parse.c and parse.h - the outputs of lemon.
1948#
1949parse.h:	parse.c
1950
1951parse.c:	$(TOP)\src\parse.y lemon.exe $(TOP)\tool\addopcodes.tcl
1952	del /Q parse.y parse.h parse.h.temp 2>NUL
1953	copy $(TOP)\src\parse.y .
1954	.\lemon.exe $(REQ_FEATURE_FLAGS) $(OPT_FEATURE_FLAGS) $(EXT_FEATURE_FLAGS) $(OPTS) parse.y
1955	move parse.h parse.h.temp
1956	$(TCLSH_CMD) $(TOP)\tool\addopcodes.tcl parse.h.temp > parse.h
1957
1958$(SQLITE3H):	$(TOP)\src\sqlite.h.in $(TOP)\manifest.uuid $(TOP)\VERSION
1959	$(TCLSH_CMD) $(TOP)\tool\mksqlite3h.tcl $(TOP:\=/) > $(SQLITE3H) $(MKSQLITE3H_ARGS)
1960
1961sqlite3ext.h:	.target_source
1962!IF $(USE_STDCALL)!=0 || $(FOR_WIN10)!=0
1963	type tsrc\sqlite3ext.h | $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "\(\*\)" "(SQLITE_CALLBACK *)" \
1964		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "\(\*" "(SQLITE_APICALL *" > sqlite3ext.h
1965	copy /Y sqlite3ext.h tsrc\sqlite3ext.h
1966!ELSE
1967	copy /Y tsrc\sqlite3ext.h sqlite3ext.h
1968!ENDIF
1969
1970mkkeywordhash.exe:	$(TOP)\tool\mkkeywordhash.c
1971	$(BCC) $(NO_WARN) -Fe$@ $(REQ_FEATURE_FLAGS) $(OPT_FEATURE_FLAGS) $(EXT_FEATURE_FLAGS) $(OPTS) \
1972		$(TOP)\tool\mkkeywordhash.c /link $(LDFLAGS) $(NLTLINKOPTS) $(NLTLIBPATHS)
1973
1974keywordhash.h:	$(TOP)\tool\mkkeywordhash.c mkkeywordhash.exe
1975	.\mkkeywordhash.exe > keywordhash.h
1976
1977
1978
1979# Rules to build the extension objects.
1980#
1981icu.lo:	$(TOP)\ext\icu\icu.c $(HDR) $(EXTHDR)
1982	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\icu\icu.c
1983
1984fts2.lo:	$(TOP)\ext\fts2\fts2.c $(HDR) $(EXTHDR)
1985	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2.c
1986
1987fts2_hash.lo:	$(TOP)\ext\fts2\fts2_hash.c $(HDR) $(EXTHDR)
1988	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_hash.c
1989
1990fts2_icu.lo:	$(TOP)\ext\fts2\fts2_icu.c $(HDR) $(EXTHDR)
1991	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_icu.c
1992
1993fts2_porter.lo:	$(TOP)\ext\fts2\fts2_porter.c $(HDR) $(EXTHDR)
1994	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_porter.c
1995
1996fts2_tokenizer.lo:	$(TOP)\ext\fts2\fts2_tokenizer.c $(HDR) $(EXTHDR)
1997	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_tokenizer.c
1998
1999fts2_tokenizer1.lo:	$(TOP)\ext\fts2\fts2_tokenizer1.c $(HDR) $(EXTHDR)
2000	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_tokenizer1.c
2001
2002fts3.lo:	$(TOP)\ext\fts3\fts3.c $(HDR) $(EXTHDR)
2003	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3.c
2004
2005fts3_aux.lo:	$(TOP)\ext\fts3\fts3_aux.c $(HDR) $(EXTHDR)
2006	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_aux.c
2007
2008fts3_expr.lo:	$(TOP)\ext\fts3\fts3_expr.c $(HDR) $(EXTHDR)
2009	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_expr.c
2010
2011fts3_hash.lo:	$(TOP)\ext\fts3\fts3_hash.c $(HDR) $(EXTHDR)
2012	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_hash.c
2013
2014fts3_icu.lo:	$(TOP)\ext\fts3\fts3_icu.c $(HDR) $(EXTHDR)
2015	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_icu.c
2016
2017fts3_snippet.lo:	$(TOP)\ext\fts3\fts3_snippet.c $(HDR) $(EXTHDR)
2018	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_snippet.c
2019
2020fts3_porter.lo:	$(TOP)\ext\fts3\fts3_porter.c $(HDR) $(EXTHDR)
2021	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_porter.c
2022
2023fts3_tokenizer.lo:	$(TOP)\ext\fts3\fts3_tokenizer.c $(HDR) $(EXTHDR)
2024	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_tokenizer.c
2025
2026fts3_tokenizer1.lo:	$(TOP)\ext\fts3\fts3_tokenizer1.c $(HDR) $(EXTHDR)
2027	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_tokenizer1.c
2028
2029fts3_tokenize_vtab.lo:	$(TOP)\ext\fts3\fts3_tokenize_vtab.c $(HDR) $(EXTHDR)
2030	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_tokenize_vtab.c
2031
2032fts3_unicode.lo:	$(TOP)\ext\fts3\fts3_unicode.c $(HDR) $(EXTHDR)
2033	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_unicode.c
2034
2035fts3_unicode2.lo:	$(TOP)\ext\fts3\fts3_unicode2.c $(HDR) $(EXTHDR)
2036	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_unicode2.c
2037
2038fts3_write.lo:	$(TOP)\ext\fts3\fts3_write.c $(HDR) $(EXTHDR)
2039	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_write.c
2040
2041rtree.lo:	$(TOP)\ext\rtree\rtree.c $(HDR) $(EXTHDR)
2042	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\rtree\rtree.c
2043
2044sqlite3session.lo:	$(TOP)\ext\session\sqlite3session.c $(HDR) $(EXTHDR)
2045	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\session\sqlite3session.c
2046
2047# FTS5 things
2048#
2049FTS5_SRC = \
2050   $(TOP)\ext\fts5\fts5.h \
2051   $(TOP)\ext\fts5\fts5Int.h \
2052   $(TOP)\ext\fts5\fts5_aux.c \
2053   $(TOP)\ext\fts5\fts5_buffer.c \
2054   $(TOP)\ext\fts5\fts5_main.c \
2055   $(TOP)\ext\fts5\fts5_config.c \
2056   $(TOP)\ext\fts5\fts5_expr.c \
2057   $(TOP)\ext\fts5\fts5_hash.c \
2058   $(TOP)\ext\fts5\fts5_index.c \
2059   fts5parse.c fts5parse.h \
2060   $(TOP)\ext\fts5\fts5_storage.c \
2061   $(TOP)\ext\fts5\fts5_tokenize.c \
2062   $(TOP)\ext\fts5\fts5_unicode2.c \
2063   $(TOP)\ext\fts5\fts5_varint.c \
2064   $(TOP)\ext\fts5\fts5_vocab.c
2065
2066fts5parse.c:	$(TOP)\ext\fts5\fts5parse.y lemon.exe
2067	copy $(TOP)\ext\fts5\fts5parse.y .
2068	del /Q fts5parse.h 2>NUL
2069	.\lemon.exe $(REQ_FEATURE_FLAGS) $(OPT_FEATURE_FLAGS) $(EXT_FEATURE_FLAGS) $(OPTS) fts5parse.y
2070
2071fts5parse.h:	fts5parse.c
2072
2073fts5.c:	$(FTS5_SRC)
2074	$(TCLSH_CMD) $(TOP)\ext\fts5\tool\mkfts5c.tcl
2075	copy $(TOP)\ext\fts5\fts5.h .
2076
2077fts5.lo:	fts5.c $(HDR) $(EXTHDR)
2078	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c fts5.c
2079
2080fts5_ext.lo:	fts5.c $(HDR) $(EXTHDR)
2081	$(LTCOMPILE) $(NO_WARN) -c fts5.c
2082
2083fts5.dll:	fts5_ext.lo
2084	$(LD) $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) /DLL /OUT:$@ fts5_ext.lo
2085
2086sqlite3rbu.lo:	$(TOP)\ext\rbu\sqlite3rbu.c $(HDR) $(EXTHDR)
2087	$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\rbu\sqlite3rbu.c
2088
2089# Rules to build the 'testfixture' application.
2090#
2091# If using the amalgamation, use sqlite3.c directly to build the test
2092# fixture.  Otherwise link against libsqlite3.lib.  (This distinction is
2093# necessary because the test fixture requires non-API symbols which are
2094# hidden when the library is built via the amalgamation).
2095#
2096TESTFIXTURE_FLAGS = -DTCLSH=1 -DSQLITE_TEST=1 -DSQLITE_CRASH_TEST=1
2097TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_SERVER=1 -DSQLITE_PRIVATE=""
2098TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_CORE $(NO_WARN)
2099TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_SERIES_CONSTRAINT_VERIFY=1
2100TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_DEFAULT_PAGE_SIZE=1024
2101TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_ENABLE_STMTVTAB
2102TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) $(TEST_CCONV_OPTS)
2103
2104TESTFIXTURE_SRC0 = $(TESTEXT) $(TESTSRC2)
2105TESTFIXTURE_SRC1 = $(TESTEXT) $(SQLITE3C)
2106!IF $(USE_AMALGAMATION)==0
2107TESTFIXTURE_SRC = $(TESTSRC) $(TOP)\src\tclsqlite.c $(TESTFIXTURE_SRC0)
2108!ELSE
2109TESTFIXTURE_SRC = $(TESTSRC) $(TOP)\src\tclsqlite.c $(TESTFIXTURE_SRC1)
2110!ENDIF
2111
2112!IF $(USE_STDCALL)!=0 || $(FOR_WIN10)!=0
2113sqlite_tclDecls.h:
2114	echo #ifndef SQLITE_TCLAPI > $(SQLITETCLDECLSH)
2115	echo #  define SQLITE_TCLAPI >> $(SQLITETCLDECLSH)
2116	echo #endif >> $(SQLITETCLDECLSH)
2117	type "$(TCLINCDIR)\tclDecls.h" \
2118		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "^(EXTERN(?: CONST\d+?)?\s+?[^\(]*?\s+?)Tcl_" "\1 SQLITE_TCLAPI Tcl_" \
2119		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "^(EXTERN\s+?(?:void|VOID)\s+?)TclFreeObj" "\1 SQLITE_TCLAPI TclFreeObj" \
2120		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "\(\*tcl_" "(SQLITE_TCLAPI *tcl_" \
2121		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "\(\*tclFreeObj" "(SQLITE_TCLAPI *tclFreeObj" \
2122		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "\(\*" "(SQLITE_TCLAPI *" >> $(SQLITETCLDECLSH)
2123
2124sqlite_tcl.h:
2125	type "$(TCLINCDIR)\tcl.h" | $(TCLSH_CMD) $(TOP)\tool\replace.tcl exact tclDecls.h sqlite_tclDecls.h \
2126		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "typedef (.*?)\(Tcl_" "typedef \1 (SQLITE_TCLAPI Tcl_" \
2127		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl exact "void (*freeProc)" "void (SQLITE_TCLAPI *freeProc)" \
2128		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl exact "Tcl_HashEntry *(*findProc)" "Tcl_HashEntry *(SQLITE_TCLAPI *findProc)" \
2129		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl exact "Tcl_HashEntry *(*createProc)" "Tcl_HashEntry *(SQLITE_TCLAPI *createProc)" >> $(SQLITETCLH)
2130!ENDIF
2131
2132testfixture.exe:	$(TESTFIXTURE_SRC) $(SQLITE3H) $(LIBRESOBJS) $(HDR) $(SQLITE_TCL_DEP)
2133	$(LTLINK) -DSQLITE_NO_SYNC=1 $(TESTFIXTURE_FLAGS) \
2134		-DBUILD_sqlite -I$(TCLINCDIR) \
2135		$(TESTFIXTURE_SRC) \
2136		/link $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) $(LIBRESOBJS) $(LTLIBS) $(TLIBS)
2137
2138extensiontest:	testfixture.exe testloadext.dll
2139	@set PATH=$(LIBTCLPATH);$(PATH)
2140	.\testfixture.exe $(TOP)\test\loadext.test $(TESTOPTS)
2141
2142fulltest:	$(TESTPROGS) fuzztest
2143	@set PATH=$(LIBTCLPATH);$(PATH)
2144	.\testfixture.exe $(TOP)\test\all.test $(TESTOPTS)
2145
2146soaktest:	$(TESTPROGS)
2147	@set PATH=$(LIBTCLPATH);$(PATH)
2148	.\testfixture.exe $(TOP)\test\all.test -soak=1 $(TESTOPTS)
2149
2150fulltestonly:	$(TESTPROGS) fuzztest
2151	@set PATH=$(LIBTCLPATH);$(PATH)
2152	.\testfixture.exe $(TOP)\test\full.test
2153
2154queryplantest:	testfixture.exe shell
2155	@set PATH=$(LIBTCLPATH);$(PATH)
2156	.\testfixture.exe $(TOP)\test\permutations.test queryplanner $(TESTOPTS)
2157
2158fuzztest:	fuzzcheck.exe
2159	.\fuzzcheck.exe $(FUZZDATA)
2160
2161fastfuzztest:	fuzzcheck.exe
2162	.\fuzzcheck.exe --limit-mem 100M $(FUZZDATA)
2163
2164# Minimal testing that runs in less than 3 minutes (on a fast machine)
2165#
2166quicktest:	testfixture.exe sourcetest
2167	@set PATH=$(LIBTCLPATH);$(PATH)
2168	.\testfixture.exe $(TOP)\test\extraquick.test $(TESTOPTS)
2169
2170# This is the common case.  Run many tests that do not take too long,
2171# including fuzzcheck, sqlite3_analyzer, and sqldiff tests.
2172#
2173test:	$(TESTPROGS) sourcetest fastfuzztest
2174	@set PATH=$(LIBTCLPATH);$(PATH)
2175	.\testfixture.exe $(TOP)\test\veryquick.test $(TESTOPTS)
2176
2177smoketest:	$(TESTPROGS)
2178	@set PATH=$(LIBTCLPATH);$(PATH)
2179	.\testfixture.exe $(TOP)\test\main.test $(TESTOPTS)
2180
2181sqlite3_analyzer.c:	$(SQLITE3C) $(SQLITE3H) $(TOP)\src\tclsqlite.c $(TOP)\tool\spaceanal.tcl $(SQLITE_TCL_DEP)
2182	echo #define TCLSH 2 > $@
2183	echo #define SQLITE_ENABLE_DBSTAT_VTAB 1 >> $@
2184	copy $@ + $(SQLITE3C) + $(TOP)\src\tclsqlite.c $@
2185	echo static const char *tclsh_main_loop(void){ >> $@
2186	echo static const char *zMainloop = >> $@
2187	$(TCLSH_CMD) $(TOP)\tool\tostr.tcl $(TOP)\tool\spaceanal.tcl >> $@
2188	echo ; return zMainloop; } >> $@
2189
2190sqlite3_analyzer.exe:	sqlite3_analyzer.c $(LIBRESOBJS)
2191	$(LTLINK) $(NO_WARN) -DBUILD_sqlite -I$(TCLINCDIR) sqlite3_analyzer.c \
2192		/link $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) $(LIBRESOBJS) $(LTLIBS) $(TLIBS)
2193
2194dbdump.exe:	$(TOP)\ext\misc\dbdump.c $(SQLITE3C) $(SQLITE3H)
2195	$(LTLINK) $(NO_WARN) -DDBDUMP_STANDALONE $(TOP)\ext\misc\dbdump.c $(SQLITE3C) \
2196		/link $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) $(LIBRESOBJS) $(LTLIBS)
2197
2198testloadext.lo:	$(TOP)\src\test_loadext.c
2199	$(LTCOMPILE) $(NO_WARN) -c $(TOP)\src\test_loadext.c
2200
2201testloadext.dll:	testloadext.lo
2202	$(LD) $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) /DLL /OUT:$@ testloadext.lo
2203
2204showdb.exe:	$(TOP)\tool\showdb.c $(SQLITE3C) $(SQLITE3H)
2205	$(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
2206		$(TOP)\tool\showdb.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2207
2208showstat4.exe:	$(TOP)\tool\showstat4.c $(SQLITE3C) $(SQLITE3H)
2209	$(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
2210		$(TOP)\tool\showstat4.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2211
2212showjournal.exe:	$(TOP)\tool\showjournal.c $(SQLITE3C) $(SQLITE3H)
2213	$(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
2214		$(TOP)\tool\showjournal.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2215
2216showwal.exe:	$(TOP)\tool\showwal.c $(SQLITE3C) $(SQLITE3H)
2217	$(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
2218		$(TOP)\tool\showwal.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2219
2220changeset.exe:	$(TOP)\ext\session\changeset.c $(SQLITE3C) $(SQLITE3H)
2221	$(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
2222		-DSQLITE_ENABLE_SESSION=1 -DSQLITE_ENABLE_PREUPDATE_HOOK=1 \
2223		$(TOP)\ext\session\changeset.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2224
2225fts3view.exe:	$(TOP)\ext\fts3\tool\fts3view.c $(SQLITE3C) $(SQLITE3H)
2226	$(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
2227		$(TOP)\ext\fts3\tool\fts3view.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2228
2229rollback-test.exe:	$(TOP)\tool\rollback-test.c $(SQLITE3C) $(SQLITE3H)
2230	$(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
2231		$(TOP)\tool\rollback-test.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2232
2233LogEst.exe:	$(TOP)\tool\logest.c $(SQLITE3H)
2234	$(LTLINK) $(NO_WARN) $(TOP)\tool\LogEst.c /link $(LDFLAGS) $(LTLINKOPTS)
2235
2236wordcount.exe:	$(TOP)\test\wordcount.c $(SQLITE3C) $(SQLITE3H)
2237	$(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
2238		$(TOP)\test\wordcount.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2239
2240speedtest1.exe:	$(TOP)\test\speedtest1.c $(SQLITE3C) $(SQLITE3H)
2241	$(LTLINK) $(NO_WARN) $(ST_COMPILE_OPTS) -DSQLITE_OMIT_LOAD_EXTENSION \
2242		$(TOP)\test\speedtest1.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2243
2244kvtest.exe:	$(TOP)\test\kvtest.c $(SQLITE3C) $(SQLITE3H)
2245	$(LTLINK) $(NO_WARN) $(KV_COMPILE_OPTS) \
2246		$(TOP)\test\kvtest.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2247
2248dbselftest.exe:	$(TOP)\test\dbselftest.c $(SQLITE3C) $(SQLITE3H)
2249	$(LTLINK) $(NO_WARN) $(DBSELFTEST_COMPILE_OPTS) $(TOP)\test\dbselftest.c $(SQLITE3C)
2250
2251rbu.exe:	$(TOP)\ext\rbu\rbu.c $(TOP)\ext\rbu\sqlite3rbu.c $(SQLITE3C) $(SQLITE3H)
2252	$(LTLINK) $(NO_WARN) -DSQLITE_ENABLE_RBU \
2253		$(TOP)\ext\rbu\rbu.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2254
2255LSMDIR=$(TOP)\ext\lsm1
2256!INCLUDE $(LSMDIR)\Makefile.msc
2257
2258moreclean:	clean
2259	del /Q $(SQLITE3C) $(SQLITE3H) 2>NUL
2260# <</mark>>
2261
2262clean:
2263	del /Q *.exp *.lo *.ilk *.lib *.obj *.ncb *.pdb *.sdf *.suo 2>NUL
2264	del /Q *.bsc *.def *.cod *.da *.bb *.bbg *.vc gmon.out 2>NUL
2265	del /Q $(SQLITE3EXE) $(SQLITE3DLL) Replace.exe 2>NUL
2266# <<mark>>
2267	del /Q sqlite3.c sqlite3.h 2>NUL
2268	del /Q opcodes.c opcodes.h 2>NUL
2269	del /Q lemon.* lempar.c parse.* 2>NUL
2270	del /Q mkkeywordhash.* keywordhash.h 2>NUL
2271	del /Q notasharedlib.* 2>NUL
2272	-rmdir /Q/S .deps 2>NUL
2273	-rmdir /Q/S .libs 2>NUL
2274	-rmdir /Q/S tsrc 2>NUL
2275	del /Q .target_source 2>NUL
2276	del /Q tclsqlite3.exe $(SQLITETCLH) $(SQLITETCLDECLSH) 2>NUL
2277	del /Q lsm.dll lsmtest.exe 2>NUL
2278	del /Q testloadext.dll 2>NUL
2279	del /Q testfixture.exe test.db 2>NUL
2280	del /Q LogEst.exe fts3view.exe rollback-test.exe showdb.exe dbdump.exe 2>NUL
2281	del /Q changeset.exe 2>NUL
2282	del /Q showjournal.exe showstat4.exe showwal.exe speedtest1.exe 2>NUL
2283	del /Q mptester.exe wordcount.exe rbu.exe srcck1.exe 2>NUL
2284	del /Q sqlite3.c sqlite3-*.c 2>NUL
2285	del /Q sqlite3rc.h 2>NUL
2286	del /Q shell.c sqlite3ext.h sqlite3session.h 2>NUL
2287	del /Q sqlite3_analyzer.exe sqlite3_analyzer.c 2>NUL
2288	del /Q sqlite-*-output.vsix 2>NUL
2289	del /Q fuzzershell.exe fuzzcheck.exe sqldiff.exe dbhash.exe 2>NUL
2290	del /Q fts5.* fts5parse.* 2>NUL
2291# <</mark>>
2292