xref: /sqlite-3.40.0/Makefile.msc (revision 48864df9)
1#
2# nmake Makefile for SQLite
3#
4
5# The toplevel directory of the source tree.  This is the directory
6# that contains this "Makefile.msc".
7#
8TOP = .
9
10# Set this non-0 to create and use the SQLite amalgamation file.
11#
12!IFNDEF USE_AMALGAMATION
13USE_AMALGAMATION = 1
14!ENDIF
15
16# Set this non-0 to use the International Components for Unicode (ICU).
17#
18!IFNDEF USE_ICU
19USE_ICU = 0
20!ENDIF
21
22# Set this non-0 to dynamically link to the MSVC runtime library.
23#
24!IFNDEF USE_CRT_DLL
25USE_CRT_DLL = 0
26!ENDIF
27
28# Set this non-0 to attempt setting the native compiler automatically
29# for cross-compiling the command line tools needed during the compilation
30# process.
31#
32!IFNDEF XCOMPILE
33XCOMPILE = 0
34!ENDIF
35
36# Set this non-0 to use the native libraries paths for cross-compiling
37# the command line tools needed during the compilation process.
38#
39!IFNDEF USE_NATIVE_LIBPATHS
40USE_NATIVE_LIBPATHS = 0
41!ENDIF
42
43# Set this 0 to skip the compiling and embedding of version resources.
44#
45!IFNDEF USE_RC
46USE_RC = 1
47!ENDIF
48
49# Set this non-0 to compile binaries suitable for the WinRT environment.
50# This setting does not apply to any binaries that require Tcl to operate
51# properly (i.e. the text fixture, etc).
52#
53!IFNDEF FOR_WINRT
54FOR_WINRT = 0
55!ENDIF
56
57# Set this non-0 to skip attempting to look for and/or link with the Tcl
58# runtime library.
59#
60!IFNDEF NO_TCL
61NO_TCL = 0
62!ENDIF
63
64# Set this to non-0 to create and use PDBs.
65#
66!IFNDEF SYMBOLS
67SYMBOLS = 1
68!ENDIF
69
70# Set this to non-0 to use the SQLite debugging heap subsystem.
71#
72!IFNDEF MEMDEBUG
73MEMDEBUG = 0
74!ENDIF
75
76# Set this to non-0 to use the Win32 native heap subsystem.
77#
78!IFNDEF WIN32HEAP
79WIN32HEAP = 0
80!ENDIF
81
82# Set this to one of the following values to enable various debugging
83# features.  Each level includes the debugging options from the previous
84# levels.  Currently, the recognized values for DEBUG are:
85#
86# 0 == NDEBUG: Disables assert() and other runtime diagnostics.
87# 1 == Disables NDEBUG and all optimizations and then enables PDBs.
88# 2 == SQLITE_DEBUG: Enables various diagnostics messages and code.
89# 3 == SQLITE_WIN32_MALLOC_VALIDATE: Validate the Win32 native heap per call.
90# 4 == SQLITE_DEBUG_OS_TRACE: Enables output from the OSTRACE() macros.
91# 5 == SQLITE_ENABLE_IOTRACE: Enables output from the IOTRACE() macros.
92#
93!IFNDEF DEBUG
94DEBUG = 0
95!ENDIF
96
97# Check for the predefined command macro CC.  This should point to the compiler
98# binary for the target platform.  If it is not defined, simply define it to
99# the legacy default value 'cl.exe'.
100#
101!IFNDEF CC
102CC = cl.exe
103!ENDIF
104
105# Check for the command macro LD.  This should point to the linker binary for
106# the target platform.  If it is not defined, simply define it to the legacy
107# default value 'link.exe'.
108#
109!IFNDEF LD
110LD = link.exe
111!ENDIF
112
113# Check for the predefined command macro RC.  This should point to the resource
114# compiler binary for the target platform.  If it is not defined, simply define
115# it to the legacy default value 'rc.exe'.
116#
117!IFNDEF RC
118RC = rc.exe
119!ENDIF
120
121# Check for the command macro NCC.  This should point to the compiler binary
122# for the platform the compilation process is taking place on.  If it is not
123# defined, simply define it to have the same value as the CC macro.  When
124# cross-compiling, it is suggested that this macro be modified via the command
125# line (since nmake itself does not provide a built-in method to guess it).
126# For example, to use the x86 compiler when cross-compiling for x64, a command
127# line similar to the following could be used (all on one line):
128#
129#     nmake /f Makefile.msc sqlite3.dll
130#           XCOMPILE=1 USE_NATIVE_LIBPATHS=1
131#
132# Alternatively, the full path and file name to the compiler binary for the
133# platform the compilation process is taking place may be specified (all on
134# one line):
135#
136#     nmake /f Makefile.msc sqlite3.dll
137#           "NCC=""%VCINSTALLDIR%\bin\cl.exe"""
138#           USE_NATIVE_LIBPATHS=1
139#
140!IFDEF NCC
141NCC = $(NCC:\\=\)
142!ELSEIF $(XCOMPILE)!=0
143NCC = "$(VCINSTALLDIR)\bin\cl.exe"
144NCC = $(NCC:\\=\)
145!ELSE
146NCC = $(CC)
147!ENDIF
148
149# Check for the MSVC runtime library path macro.  Othertise, this
150# value will default to the 'lib' directory underneath the MSVC
151# installation directory.
152#
153!IFNDEF NCRTLIBPATH
154NCRTLIBPATH = $(VCINSTALLDIR)\lib
155!ENDIF
156
157NCRTLIBPATH = $(NCRTLIBPATH:\\=\)
158
159# Check for the Platform SDK library path macro.  Othertise, this
160# value will default to the 'lib' directory underneath the Windows
161# SDK installation directory (the environment variable used appears
162# to be available when using Visual C++ 2008 or later via the
163# command line).
164#
165!IFNDEF NSDKLIBPATH
166NSDKLIBPATH = $(WINDOWSSDKDIR)\lib
167!ENDIF
168
169NSDKLIBPATH = $(NSDKLIBPATH:\\=\)
170
171# C compiler and options for use in building executables that
172# will run on the platform that is doing the build.
173#
174BCC = $(NCC) -W3
175
176# Check if the native library paths should be used when compiling
177# the command line tools used during the compilation process.  If
178# so, set the necessary macro now.
179#
180!IF $(USE_NATIVE_LIBPATHS)!=0
181NLTLIBPATHS = "/LIBPATH:$(NCRTLIBPATH)" "/LIBPATH:$(NSDKLIBPATH)"
182!ENDIF
183
184# C compiler and options for use in building executables that
185# will run on the target platform.  (BCC and TCC are usually the
186# same unless your are cross-compiling.)
187#
188TCC = $(CC) -W3 -DSQLITE_OS_WIN=1 -I$(TOP) -I$(TOP)\src -fp:precise
189RCC = $(RC) -DSQLITE_OS_WIN=1 -I$(TOP) -I$(TOP)\src
190
191# When compiling the library for use in the WinRT environment,
192# the following compile-time options must be used as well to
193# disable use of Win32 APIs that are not available and to enable
194# use of Win32 APIs that are specific to Windows 8 and/or WinRT.
195#
196!IF $(FOR_WINRT)!=0
197TCC = $(TCC) -DSQLITE_OS_WINRT=1
198RCC = $(RCC) -DSQLITE_OS_WINRT=1
199TCC = $(TCC) -DWINAPI_FAMILY=WINAPI_FAMILY_APP
200RCC = $(RCC) -DWINAPI_FAMILY=WINAPI_FAMILY_APP
201!ENDIF
202
203# Also, we need to dynamically link to the correct MSVC runtime
204# when compiling for WinRT (e.g. debug or release) OR if the
205# USE_CRT_DLL option is set to force dynamically linking to the
206# MSVC runtime library.
207#
208!IF $(FOR_WINRT)!=0 || $(USE_CRT_DLL)!=0
209!IF $(DEBUG)>0
210TCC = $(TCC) -MDd
211BCC = $(BCC) -MDd
212!ELSE
213TCC = $(TCC) -MD
214BCC = $(BCC) -MD
215!ENDIF
216!ELSE
217!IF $(DEBUG)>0
218TCC = $(TCC) -MTd
219BCC = $(BCC) -MTd
220!ELSE
221TCC = $(TCC) -MT
222BCC = $(BCC) -MT
223!ENDIF
224!ENDIF
225
226# The mksqlite3c.tcl and mksqlite3h.tcl scripts will pull in
227# any extension header files by default.  For non-amalgamation
228# builds, we need to make sure the compiler can find these.
229#
230!IF $(USE_AMALGAMATION)==0
231TCC = $(TCC) -I$(TOP)\ext\fts3
232RCC = $(RCC) -I$(TOP)\ext\fts3
233TCC = $(TCC) -I$(TOP)\ext\rtree
234RCC = $(RCC) -I$(TOP)\ext\rtree
235!ENDIF
236
237# Define -DNDEBUG to compile without debugging (i.e., for production usage)
238# Omitting the define will cause extra debugging code to be inserted and
239# includes extra comments when "EXPLAIN stmt" is used.
240#
241!IF $(DEBUG)==0
242TCC = $(TCC) -DNDEBUG
243BCC = $(BCC) -DNDEBUG
244RCC = $(RCC) -DNDEBUG
245!ENDIF
246
247!IF $(DEBUG)>1
248TCC = $(TCC) -DSQLITE_DEBUG
249RCC = $(RCC) -DSQLITE_DEBUG
250!ENDIF
251
252!IF $(DEBUG)>3
253TCC = $(TCC) -DSQLITE_DEBUG_OS_TRACE=1
254RCC = $(RCC) -DSQLITE_DEBUG_OS_TRACE=1
255!ENDIF
256
257!IF $(DEBUG)>4
258TCC = $(TCC) -DSQLITE_ENABLE_IOTRACE
259RCC = $(RCC) -DSQLITE_ENABLE_IOTRACE
260!ENDIF
261
262#
263# Prevent warnings about "insecure" MSVC runtime library functions
264# being used.
265#
266TCC = $(TCC) -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS
267BCC = $(BCC) -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS
268RCC = $(RCC) -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS
269
270#
271# Prevent warnings about "deprecated" POSIX functions being used.
272#
273TCC = $(TCC) -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS
274BCC = $(BCC) -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS
275RCC = $(RCC) -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS
276
277#
278# Use the SQLite debugging heap subsystem?
279#
280!IF $(MEMDEBUG)!=0
281TCC = $(TCC) -DSQLITE_MEMDEBUG=1
282RCC = $(RCC) -DSQLITE_MEMDEBUG=1
283
284#
285# Use native Win32 heap subsystem instead of malloc/free?
286#
287!ELSEIF $(WIN32HEAP)!=0
288TCC = $(TCC) -DSQLITE_WIN32_MALLOC=1
289RCC = $(RCC) -DSQLITE_WIN32_MALLOC=1
290
291#
292# Validate the heap on every call into the native Win32 heap subsystem?
293#
294!IF $(DEBUG)>2
295TCC = $(TCC) -DSQLITE_WIN32_MALLOC_VALIDATE=1
296RCC = $(RCC) -DSQLITE_WIN32_MALLOC_VALIDATE=1
297!ENDIF
298!ENDIF
299
300# The locations of the Tcl header and library files.  Also, the library that
301# non-stubs enabled programs using Tcl must link against.  These variables
302# (TCLINCDIR, TCLLIBDIR, and LIBTCL) may be overridden via the environment
303# prior to running nmake in order to match the actual installed location and
304# version on this machine.
305#
306!IFNDEF TCLINCDIR
307TCLINCDIR = c:\tcl\include
308!ENDIF
309
310!IFNDEF TCLLIBDIR
311TCLLIBDIR = c:\tcl\lib
312!ENDIF
313
314!IFNDEF LIBTCL
315LIBTCL = tcl85.lib
316!ENDIF
317
318# The locations of the ICU header and library files.  These variables
319# (ICUINCDIR, ICULIBDIR, and LIBICU) may be overridden via the environment
320# prior to running nmake in order to match the actual installed location on
321# this machine.
322#
323!IFNDEF ICUINCDIR
324ICUINCDIR = c:\icu\include
325!ENDIF
326
327!IFNDEF ICULIBDIR
328ICULIBDIR = c:\icu\lib
329!ENDIF
330
331!IFNDEF LIBICU
332LIBICU = icuuc.lib icuin.lib
333!ENDIF
334
335# This is the command to use for tclsh - normally just "tclsh", but we may
336# know the specific version we want to use.  This variable (TCLSH_CMD) may be
337# overridden via the environment prior to running nmake in order to select a
338# specific Tcl shell to use.
339#
340!IFNDEF TCLSH_CMD
341TCLSH_CMD = tclsh85
342!ENDIF
343
344# Compiler options needed for programs that use the readline() library.
345#
346READLINE_FLAGS = -DHAVE_READLINE=0
347
348# The library that programs using readline() must link against.
349#
350LIBREADLINE =
351
352# Should the database engine be compiled threadsafe
353#
354TCC = $(TCC) -DSQLITE_THREADSAFE=1
355RCC = $(RCC) -DSQLITE_THREADSAFE=1
356
357# Do threads override each others locks by default (1), or do we test (-1)
358#
359TCC = $(TCC) -DSQLITE_THREAD_OVERRIDE_LOCK=-1
360RCC = $(RCC) -DSQLITE_THREAD_OVERRIDE_LOCK=-1
361
362# Any target libraries which libsqlite must be linked against
363#
364!IFNDEF TLIBS
365TLIBS =
366!ENDIF
367
368# Flags controlling use of the in memory btree implementation
369#
370# SQLITE_TEMP_STORE is 0 to force temporary tables to be in a file, 1 to
371# default to file, 2 to default to memory, and 3 to force temporary
372# tables to always be in memory.
373#
374TCC = $(TCC) -DSQLITE_TEMP_STORE=1
375RCC = $(RCC) -DSQLITE_TEMP_STORE=1
376
377# Enable/disable loadable extensions, and other optional features
378# based on configuration. (-DSQLITE_OMIT*, -DSQLITE_ENABLE*).
379# The same set of OMIT and ENABLE flags should be passed to the
380# LEMON parser generator and the mkkeywordhash tool as well.
381
382# BEGIN standard options
383OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_FTS3=1
384OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_RTREE=1
385OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_COLUMN_METADATA=1
386# END standard options
387
388# BEGIN required Windows option
389OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_MAX_TRIGGER_DEPTH=100
390# END required Windows option
391
392TCC = $(TCC) $(OPT_FEATURE_FLAGS)
393RCC = $(RCC) $(OPT_FEATURE_FLAGS)
394
395# Add in any optional parameters specified on the make commane line
396# ie.  make "OPTS=-DSQLITE_ENABLE_FOO=1 -DSQLITE_OMIT_FOO=1".
397TCC = $(TCC) $(OPTS)
398RCC = $(RCC) $(OPTS)
399
400# If symbols are enabled, enable PDBs.
401# If debugging is enabled, disable all optimizations and enable PDBs.
402!IF $(DEBUG)>0
403TCC = $(TCC) -Od -D_DEBUG
404BCC = $(BCC) -Od -D_DEBUG
405RCC = $(RCC) -D_DEBUG
406!ELSE
407TCC = $(TCC) -O2
408BCC = $(BCC) -O2
409!ENDIF
410
411!IF $(DEBUG)>0 || $(SYMBOLS)!=0
412TCC = $(TCC) -Zi
413BCC = $(BCC) -Zi
414!ENDIF
415
416# If ICU support is enabled, add the compiler options for it.
417!IF $(USE_ICU)!=0
418TCC = $(TCC) -DSQLITE_ENABLE_ICU=1
419RCC = $(RCC) -DSQLITE_ENABLE_ICU=1
420TCC = $(TCC) -I$(TOP)\ext\icu
421RCC = $(RCC) -I$(TOP)\ext\icu
422TCC = $(TCC) -I$(ICUINCDIR)
423RCC = $(RCC) -I$(ICUINCDIR)
424!ENDIF
425
426# Command line prefixes for compiling code, compiling resources,
427# linking, etc.
428LTCOMPILE = $(TCC) -Fo$@
429LTRCOMPILE = $(RCC) -r
430LTLIB = lib.exe
431LTLINK = $(TCC) -Fe$@
432
433# If a platform was set, force the linker to target that.
434# Note that the vcvars*.bat family of batch files typically
435# set this for you.  Otherwise, the linker will attempt
436# to deduce the binary type based on the object files.
437!IFDEF PLATFORM
438LTLINKOPTS = /MACHINE:$(PLATFORM)
439LTLIBOPTS = /MACHINE:$(PLATFORM)
440!ENDIF
441
442# When compiling for use in the WinRT environment, the following
443# linker option must be used to mark the executable as runnable
444# only in the context of an application container.
445#
446!IF $(FOR_WINRT)!=0
447LTLINKOPTS = $(LTLINKOPTS) /APPCONTAINER
448!ENDIF
449
450# If either debugging or symbols are enabled, enable PDBs.
451!IF $(DEBUG)>0 || $(SYMBOLS)!=0
452LDFLAGS = /DEBUG
453!ENDIF
454
455# Start with the Tcl related linker options.
456!IF $(NO_TCL)==0
457LTLIBPATHS = /LIBPATH:$(TCLLIBDIR)
458LTLIBS = $(LIBTCL)
459!ENDIF
460
461# If ICU support is enabled, add the linker options for it.
462!IF $(USE_ICU)!=0
463LTLIBPATHS = $(LTLIBPATHS) /LIBPATH:$(ICULIBDIR)
464LTLIBS = $(LTLIBS) $(LIBICU)
465!ENDIF
466
467# nawk compatible awk.
468NAWK = gawk.exe
469
470# You should not have to change anything below this line
471###############################################################################
472
473# Object files for the SQLite library (non-amalgamation).
474#
475LIBOBJS0 = alter.lo analyze.lo attach.lo auth.lo \
476         backup.lo bitvec.lo btmutex.lo btree.lo build.lo \
477         callback.lo complete.lo ctime.lo date.lo delete.lo \
478         expr.lo fault.lo fkey.lo \
479         fts3.lo fts3_aux.lo fts3_expr.lo fts3_hash.lo fts3_icu.lo \
480         fts3_porter.lo fts3_snippet.lo fts3_tokenizer.lo fts3_tokenizer1.lo \
481         fts3_unicode.lo fts3_unicode2.lo fts3_write.lo \
482         func.lo global.lo hash.lo \
483         icu.lo insert.lo journal.lo legacy.lo loadext.lo \
484         main.lo malloc.lo mem0.lo mem1.lo mem2.lo mem3.lo mem5.lo \
485         memjournal.lo \
486         mutex.lo mutex_noop.lo mutex_unix.lo mutex_w32.lo \
487         notify.lo opcodes.lo os.lo os_unix.lo os_win.lo \
488         pager.lo parse.lo pcache.lo pcache1.lo pragma.lo prepare.lo printf.lo \
489         random.lo resolve.lo rowset.lo rtree.lo select.lo status.lo \
490         table.lo tokenize.lo trigger.lo \
491         update.lo util.lo vacuum.lo \
492         vdbe.lo vdbeapi.lo vdbeaux.lo vdbeblob.lo vdbemem.lo vdbesort.lo \
493         vdbetrace.lo wal.lo walker.lo where.lo utf.lo vtab.lo
494
495# Object files for the amalgamation.
496#
497LIBOBJS1 = sqlite3.lo
498
499# Determine the real value of LIBOBJ based on the 'configure' script
500#
501!IF $(USE_AMALGAMATION)==0
502LIBOBJ = $(LIBOBJS0)
503!ELSE
504LIBOBJ = $(LIBOBJS1)
505!ENDIF
506
507# Determine if embedded resource compilation and usage are enabled.
508#
509!IF $(USE_RC)!=0
510LIBRESOBJS = sqlite3res.lo
511!ELSE
512LIBRESOBJS =
513!ENDIF
514
515# All of the source code files.
516#
517SRC = \
518  $(TOP)\src\alter.c \
519  $(TOP)\src\analyze.c \
520  $(TOP)\src\attach.c \
521  $(TOP)\src\auth.c \
522  $(TOP)\src\backup.c \
523  $(TOP)\src\bitvec.c \
524  $(TOP)\src\btmutex.c \
525  $(TOP)\src\btree.c \
526  $(TOP)\src\btree.h \
527  $(TOP)\src\btreeInt.h \
528  $(TOP)\src\build.c \
529  $(TOP)\src\callback.c \
530  $(TOP)\src\complete.c \
531  $(TOP)\src\ctime.c \
532  $(TOP)\src\date.c \
533  $(TOP)\src\delete.c \
534  $(TOP)\src\expr.c \
535  $(TOP)\src\fault.c \
536  $(TOP)\src\fkey.c \
537  $(TOP)\src\func.c \
538  $(TOP)\src\global.c \
539  $(TOP)\src\hash.c \
540  $(TOP)\src\hash.h \
541  $(TOP)\src\hwtime.h \
542  $(TOP)\src\insert.c \
543  $(TOP)\src\journal.c \
544  $(TOP)\src\legacy.c \
545  $(TOP)\src\loadext.c \
546  $(TOP)\src\main.c \
547  $(TOP)\src\malloc.c \
548  $(TOP)\src\mem0.c \
549  $(TOP)\src\mem1.c \
550  $(TOP)\src\mem2.c \
551  $(TOP)\src\mem3.c \
552  $(TOP)\src\mem5.c \
553  $(TOP)\src\memjournal.c \
554  $(TOP)\src\mutex.c \
555  $(TOP)\src\mutex.h \
556  $(TOP)\src\mutex_noop.c \
557  $(TOP)\src\mutex_unix.c \
558  $(TOP)\src\mutex_w32.c \
559  $(TOP)\src\notify.c \
560  $(TOP)\src\os.c \
561  $(TOP)\src\os.h \
562  $(TOP)\src\os_common.h \
563  $(TOP)\src\os_unix.c \
564  $(TOP)\src\os_win.c \
565  $(TOP)\src\pager.c \
566  $(TOP)\src\pager.h \
567  $(TOP)\src\parse.y \
568  $(TOP)\src\pcache.c \
569  $(TOP)\src\pcache.h \
570  $(TOP)\src\pcache1.c \
571  $(TOP)\src\pragma.c \
572  $(TOP)\src\prepare.c \
573  $(TOP)\src\printf.c \
574  $(TOP)\src\random.c \
575  $(TOP)\src\resolve.c \
576  $(TOP)\src\rowset.c \
577  $(TOP)\src\select.c \
578  $(TOP)\src\status.c \
579  $(TOP)\src\shell.c \
580  $(TOP)\src\sqlite.h.in \
581  $(TOP)\src\sqlite3ext.h \
582  $(TOP)\src\sqliteInt.h \
583  $(TOP)\src\sqliteLimit.h \
584  $(TOP)\src\table.c \
585  $(TOP)\src\tclsqlite.c \
586  $(TOP)\src\tokenize.c \
587  $(TOP)\src\trigger.c \
588  $(TOP)\src\utf.c \
589  $(TOP)\src\update.c \
590  $(TOP)\src\util.c \
591  $(TOP)\src\vacuum.c \
592  $(TOP)\src\vdbe.c \
593  $(TOP)\src\vdbe.h \
594  $(TOP)\src\vdbeapi.c \
595  $(TOP)\src\vdbeaux.c \
596  $(TOP)\src\vdbeblob.c \
597  $(TOP)\src\vdbemem.c \
598  $(TOP)\src\vdbesort.c \
599  $(TOP)\src\vdbetrace.c \
600  $(TOP)\src\vdbeInt.h \
601  $(TOP)\src\vtab.c \
602  $(TOP)\src\wal.c \
603  $(TOP)\src\wal.h \
604  $(TOP)\src\walker.c \
605  $(TOP)\src\where.c
606
607# Source code for extensions
608#
609SRC = $(SRC) \
610  $(TOP)\ext\fts1\fts1.c \
611  $(TOP)\ext\fts1\fts1.h \
612  $(TOP)\ext\fts1\fts1_hash.c \
613  $(TOP)\ext\fts1\fts1_hash.h \
614  $(TOP)\ext\fts1\fts1_porter.c \
615  $(TOP)\ext\fts1\fts1_tokenizer.h \
616  $(TOP)\ext\fts1\fts1_tokenizer1.c
617SRC = $(SRC) \
618  $(TOP)\ext\fts2\fts2.c \
619  $(TOP)\ext\fts2\fts2.h \
620  $(TOP)\ext\fts2\fts2_hash.c \
621  $(TOP)\ext\fts2\fts2_hash.h \
622  $(TOP)\ext\fts2\fts2_icu.c \
623  $(TOP)\ext\fts2\fts2_porter.c \
624  $(TOP)\ext\fts2\fts2_tokenizer.h \
625  $(TOP)\ext\fts2\fts2_tokenizer.c \
626  $(TOP)\ext\fts2\fts2_tokenizer1.c
627SRC = $(SRC) \
628  $(TOP)\ext\fts3\fts3.c \
629  $(TOP)\ext\fts3\fts3.h \
630  $(TOP)\ext\fts3\fts3Int.h \
631  $(TOP)\ext\fts3\fts3_aux.c \
632  $(TOP)\ext\fts3\fts3_expr.c \
633  $(TOP)\ext\fts3\fts3_hash.c \
634  $(TOP)\ext\fts3\fts3_hash.h \
635  $(TOP)\ext\fts3\fts3_icu.c \
636  $(TOP)\ext\fts3\fts3_porter.c \
637  $(TOP)\ext\fts3\fts3_snippet.c \
638  $(TOP)\ext\fts3\fts3_tokenizer.h \
639  $(TOP)\ext\fts3\fts3_tokenizer.c \
640  $(TOP)\ext\fts3\fts3_tokenizer1.c \
641  $(TOP)\ext\fts3\fts3_unicode.c \
642  $(TOP)\ext\fts3\fts3_unicode2.c \
643  $(TOP)\ext\fts3\fts3_write.c
644SRC = $(SRC) \
645  $(TOP)\ext\icu\sqliteicu.h \
646  $(TOP)\ext\icu\icu.c
647SRC = $(SRC) \
648  $(TOP)\ext\rtree\rtree.h \
649  $(TOP)\ext\rtree\rtree.c
650
651
652# Generated source code files
653#
654SRC = $(SRC) \
655  keywordhash.h \
656  opcodes.c \
657  opcodes.h \
658  parse.c \
659  parse.h \
660  sqlite3.h
661
662# Source code to the test files.
663#
664TESTSRC = \
665  $(TOP)\src\test1.c \
666  $(TOP)\src\test2.c \
667  $(TOP)\src\test3.c \
668  $(TOP)\src\test4.c \
669  $(TOP)\src\test5.c \
670  $(TOP)\src\test6.c \
671  $(TOP)\src\test7.c \
672  $(TOP)\src\test8.c \
673  $(TOP)\src\test9.c \
674  $(TOP)\src\test_autoext.c \
675  $(TOP)\src\test_async.c \
676  $(TOP)\src\test_backup.c \
677  $(TOP)\src\test_btree.c \
678  $(TOP)\src\test_config.c \
679  $(TOP)\src\test_demovfs.c \
680  $(TOP)\src\test_devsym.c \
681  $(TOP)\src\test_fs.c \
682  $(TOP)\src\test_func.c \
683  $(TOP)\src\test_fuzzer.c \
684  $(TOP)\src\test_hexio.c \
685  $(TOP)\src\test_init.c \
686  $(TOP)\src\test_intarray.c \
687  $(TOP)\src\test_journal.c \
688  $(TOP)\src\test_malloc.c \
689  $(TOP)\src\test_multiplex.c \
690  $(TOP)\src\test_mutex.c \
691  $(TOP)\src\test_onefile.c \
692  $(TOP)\src\test_osinst.c \
693  $(TOP)\src\test_pcache.c \
694  $(TOP)\src\test_quota.c \
695  $(TOP)\src\test_regexp.c \
696  $(TOP)\src\test_rtree.c \
697  $(TOP)\src\test_schema.c \
698  $(TOP)\src\test_server.c \
699  $(TOP)\src\test_superlock.c \
700  $(TOP)\src\test_syscall.c \
701  $(TOP)\src\test_stat.c \
702  $(TOP)\src\test_tclvar.c \
703  $(TOP)\src\test_thread.c \
704  $(TOP)\src\test_vfs.c \
705  $(TOP)\src\test_wholenumber.c \
706  $(TOP)\src\test_wsd.c \
707  $(TOP)\ext\fts3\fts3_term.c \
708  $(TOP)\ext\fts3\fts3_test.c
709
710# Source code to the library files needed by the test fixture
711#
712TESTSRC2 = \
713  $(TOP)\src\attach.c \
714  $(TOP)\src\backup.c \
715  $(TOP)\src\bitvec.c \
716  $(TOP)\src\btree.c \
717  $(TOP)\src\build.c \
718  $(TOP)\src\ctime.c \
719  $(TOP)\src\date.c \
720  $(TOP)\src\expr.c \
721  $(TOP)\src\func.c \
722  $(TOP)\src\insert.c \
723  $(TOP)\src\wal.c \
724  $(TOP)\src\mem5.c \
725  $(TOP)\src\os.c \
726  $(TOP)\src\os_unix.c \
727  $(TOP)\src\os_win.c \
728  $(TOP)\src\pager.c \
729  $(TOP)\src\pragma.c \
730  $(TOP)\src\prepare.c \
731  $(TOP)\src\printf.c \
732  $(TOP)\src\random.c \
733  $(TOP)\src\pcache.c \
734  $(TOP)\src\pcache1.c \
735  $(TOP)\src\select.c \
736  $(TOP)\src\tokenize.c \
737  $(TOP)\src\utf.c \
738  $(TOP)\src\util.c \
739  $(TOP)\src\vdbeapi.c \
740  $(TOP)\src\vdbeaux.c \
741  $(TOP)\src\vdbe.c \
742  $(TOP)\src\vdbemem.c \
743  $(TOP)\src\vdbesort.c \
744  $(TOP)\src\vdbetrace.c \
745  $(TOP)\src\where.c \
746  parse.c \
747  $(TOP)\ext\fts3\fts3.c \
748  $(TOP)\ext\fts3\fts3_aux.c \
749  $(TOP)\ext\fts3\fts3_expr.c \
750  $(TOP)\ext\fts3\fts3_tokenizer.c \
751  $(TOP)\ext\fts3\fts3_unicode.c \
752  $(TOP)\ext\fts3\fts3_unicode2.c \
753  $(TOP)\ext\fts3\fts3_write.c \
754  $(TOP)\ext\async\sqlite3async.c
755
756# Header files used by all library source files.
757#
758HDR = \
759   $(TOP)\src\btree.h \
760   $(TOP)\src\btreeInt.h \
761   $(TOP)\src\hash.h \
762   $(TOP)\src\hwtime.h \
763   keywordhash.h \
764   $(TOP)\src\mutex.h \
765   opcodes.h \
766   $(TOP)\src\os.h \
767   $(TOP)\src\os_common.h \
768   $(TOP)\src\pager.h \
769   $(TOP)\src\pcache.h \
770   parse.h \
771   sqlite3.h \
772   $(TOP)\src\sqlite3ext.h \
773   $(TOP)\src\sqliteInt.h \
774   $(TOP)\src\sqliteLimit.h \
775   $(TOP)\src\vdbe.h \
776   $(TOP)\src\vdbeInt.h
777
778# Header files used by extensions
779#
780EXTHDR = $(EXTHDR) \
781  $(TOP)\ext\fts1\fts1.h \
782  $(TOP)\ext\fts1\fts1_hash.h \
783  $(TOP)\ext\fts1\fts1_tokenizer.h
784EXTHDR = $(EXTHDR) \
785  $(TOP)\ext\fts2\fts2.h \
786  $(TOP)\ext\fts2\fts2_hash.h \
787  $(TOP)\ext\fts2\fts2_tokenizer.h
788EXTHDR = $(EXTHDR) \
789  $(TOP)\ext\fts3\fts3.h \
790  $(TOP)\ext\fts3\fts3Int.h \
791  $(TOP)\ext\fts3\fts3_hash.h \
792  $(TOP)\ext\fts3\fts3_tokenizer.h
793EXTHDR = $(EXTHDR) \
794  $(TOP)\ext\rtree\rtree.h
795EXTHDR = $(EXTHDR) \
796  $(TOP)\ext\icu\sqliteicu.h
797EXTHDR = $(EXTHDR) \
798  $(TOP)\ext\rtree\sqlite3rtree.h
799
800# This is the default Makefile target.  The objects listed here
801# are what get build when you type just "make" with no arguments.
802#
803all:	dll libsqlite3.lib sqlite3.exe libtclsqlite3.lib
804
805libsqlite3.lib:	$(LIBOBJ)
806	$(LTLIB) $(LTLIBOPTS) /OUT:$@ $(LIBOBJ) $(TLIBS)
807
808libtclsqlite3.lib:	tclsqlite.lo libsqlite3.lib
809	$(LTLIB) $(LTLIBOPTS) $(LTLIBPATHS) /OUT:$@ tclsqlite.lo libsqlite3.lib $(LIBTCL:tcl=tclstub) $(TLIBS)
810
811sqlite3.exe:	$(TOP)\src\shell.c libsqlite3.lib $(LIBRESOBJS) sqlite3.h
812	$(LTLINK) $(READLINE_FLAGS) \
813		$(TOP)\src\shell.c \
814		/link $(LTLINKOPTS) $(LTLIBPATHS) libsqlite3.lib $(LIBRESOBJS) $(LIBREADLINE) $(LTLIBS) $(TLIBS)
815
816# This target creates a directory named "tsrc" and fills it with
817# copies of all of the C source code and header files needed to
818# build on the target system.  Some of the C source code and header
819# files are automatically generated.  This target takes care of
820# all that automatic generation.
821#
822.target_source:	$(SRC) $(TOP)\tool\vdbe-compress.tcl
823	-rmdir /S/Q tsrc
824	-mkdir tsrc
825	for %i in ($(SRC)) do copy /Y %i tsrc
826	del /Q tsrc\sqlite.h.in tsrc\parse.y
827	$(TCLSH_CMD) $(TOP)\tool\vdbe-compress.tcl < tsrc\vdbe.c > vdbe.new
828	move vdbe.new tsrc\vdbe.c
829	echo > .target_source
830
831sqlite3.c:	.target_source $(TOP)\tool\mksqlite3c.tcl
832	$(TCLSH_CMD) $(TOP)\tool\mksqlite3c.tcl
833	copy tsrc\shell.c .
834	copy tsrc\sqlite3ext.h .
835
836sqlite3-all.c:	sqlite3.c $(TOP)\tool\split-sqlite3c.tcl
837	$(TCLSH_CMD) $(TOP)\tool\split-sqlite3c.tcl
838
839# Rule to build the amalgamation
840#
841sqlite3.lo:	sqlite3.c
842	$(LTCOMPILE) -c sqlite3.c
843
844# Rules to build the LEMON compiler generator
845#
846lempar.c:	$(TOP)\src\lempar.c
847	copy $(TOP)\src\lempar.c .
848
849lemon.exe:	$(TOP)\tool\lemon.c lempar.c
850	$(BCC) -Daccess=_access -Fe$@ $(TOP)\tool\lemon.c /link $(NLTLIBPATHS)
851
852# Rules to build individual *.lo files from generated *.c files. This
853# applies to:
854#
855#     parse.lo
856#     opcodes.lo
857#
858parse.lo:	parse.c $(HDR)
859	$(LTCOMPILE) -c parse.c
860
861opcodes.lo:	opcodes.c
862	$(LTCOMPILE) -c opcodes.c
863
864# Rule to build the Win32 resources object file.
865#
866!IF $(USE_RC)!=0
867$(LIBRESOBJS):	$(TOP)\src\sqlite3.rc $(HDR)
868	echo #ifndef SQLITE_RESOURCE_VERSION > sqlite3rc.h
869	for /F %%V in ('type "$(TOP)\VERSION"') do ( \
870		echo #define SQLITE_RESOURCE_VERSION %%V \
871			| $(NAWK) "/.*/ { gsub(/[.]/,\",\");print }" >> sqlite3rc.h \
872	)
873	echo #endif >> sqlite3rc.h
874	$(LTRCOMPILE) -fo $(LIBRESOBJS) $(TOP)\src\sqlite3.rc
875!ENDIF
876
877# Rules to build individual *.lo files from files in the src directory.
878#
879alter.lo:	$(TOP)\src\alter.c $(HDR)
880	$(LTCOMPILE) -c $(TOP)\src\alter.c
881
882analyze.lo:	$(TOP)\src\analyze.c $(HDR)
883	$(LTCOMPILE) -c $(TOP)\src\analyze.c
884
885attach.lo:	$(TOP)\src\attach.c $(HDR)
886	$(LTCOMPILE) -c $(TOP)\src\attach.c
887
888auth.lo:	$(TOP)\src\auth.c $(HDR)
889	$(LTCOMPILE) -c $(TOP)\src\auth.c
890
891backup.lo:	$(TOP)\src\backup.c $(HDR)
892	$(LTCOMPILE) -c $(TOP)\src\backup.c
893
894bitvec.lo:	$(TOP)\src\bitvec.c $(HDR)
895	$(LTCOMPILE) -c $(TOP)\src\bitvec.c
896
897btmutex.lo:	$(TOP)\src\btmutex.c $(HDR)
898	$(LTCOMPILE) -c $(TOP)\src\btmutex.c
899
900btree.lo:	$(TOP)\src\btree.c $(HDR) $(TOP)\src\pager.h
901	$(LTCOMPILE) -c $(TOP)\src\btree.c
902
903build.lo:	$(TOP)\src\build.c $(HDR)
904	$(LTCOMPILE) -c $(TOP)\src\build.c
905
906callback.lo:	$(TOP)\src\callback.c $(HDR)
907	$(LTCOMPILE) -c $(TOP)\src\callback.c
908
909complete.lo:	$(TOP)\src\complete.c $(HDR)
910	$(LTCOMPILE) -c $(TOP)\src\complete.c
911
912ctime.lo:	$(TOP)\src\ctime.c $(HDR)
913	$(LTCOMPILE) -c $(TOP)\src\ctime.c
914
915date.lo:	$(TOP)\src\date.c $(HDR)
916	$(LTCOMPILE) -c $(TOP)\src\date.c
917
918delete.lo:	$(TOP)\src\delete.c $(HDR)
919	$(LTCOMPILE) -c $(TOP)\src\delete.c
920
921expr.lo:	$(TOP)\src\expr.c $(HDR)
922	$(LTCOMPILE) -c $(TOP)\src\expr.c
923
924fault.lo:	$(TOP)\src\fault.c $(HDR)
925	$(LTCOMPILE) -c $(TOP)\src\fault.c
926
927fkey.lo:	$(TOP)\src\fkey.c $(HDR)
928	$(LTCOMPILE) -c $(TOP)\src\fkey.c
929
930func.lo:	$(TOP)\src\func.c $(HDR)
931	$(LTCOMPILE) -c $(TOP)\src\func.c
932
933global.lo:	$(TOP)\src\global.c $(HDR)
934	$(LTCOMPILE) -c $(TOP)\src\global.c
935
936hash.lo:	$(TOP)\src\hash.c $(HDR)
937	$(LTCOMPILE) -c $(TOP)\src\hash.c
938
939insert.lo:	$(TOP)\src\insert.c $(HDR)
940	$(LTCOMPILE) -c $(TOP)\src\insert.c
941
942journal.lo:	$(TOP)\src\journal.c $(HDR)
943	$(LTCOMPILE) -c $(TOP)\src\journal.c
944
945legacy.lo:	$(TOP)\src\legacy.c $(HDR)
946	$(LTCOMPILE) -c $(TOP)\src\legacy.c
947
948loadext.lo:	$(TOP)\src\loadext.c $(HDR)
949	$(LTCOMPILE) -c $(TOP)\src\loadext.c
950
951main.lo:	$(TOP)\src\main.c $(HDR)
952	$(LTCOMPILE) -c $(TOP)\src\main.c
953
954malloc.lo:	$(TOP)\src\malloc.c $(HDR)
955	$(LTCOMPILE) -c $(TOP)\src\malloc.c
956
957mem0.lo:	$(TOP)\src\mem0.c $(HDR)
958	$(LTCOMPILE) -c $(TOP)\src\mem0.c
959
960mem1.lo:	$(TOP)\src\mem1.c $(HDR)
961	$(LTCOMPILE) -c $(TOP)\src\mem1.c
962
963mem2.lo:	$(TOP)\src\mem2.c $(HDR)
964	$(LTCOMPILE) -c $(TOP)\src\mem2.c
965
966mem3.lo:	$(TOP)\src\mem3.c $(HDR)
967	$(LTCOMPILE) -c $(TOP)\src\mem3.c
968
969mem5.lo:	$(TOP)\src\mem5.c $(HDR)
970	$(LTCOMPILE) -c $(TOP)\src\mem5.c
971
972memjournal.lo:	$(TOP)\src\memjournal.c $(HDR)
973	$(LTCOMPILE) -c $(TOP)\src\memjournal.c
974
975mutex.lo:	$(TOP)\src\mutex.c $(HDR)
976	$(LTCOMPILE) -c $(TOP)\src\mutex.c
977
978mutex_noop.lo:	$(TOP)\src\mutex_noop.c $(HDR)
979	$(LTCOMPILE) -c $(TOP)\src\mutex_noop.c
980
981mutex_unix.lo:	$(TOP)\src\mutex_unix.c $(HDR)
982	$(LTCOMPILE) -c $(TOP)\src\mutex_unix.c
983
984mutex_w32.lo:	$(TOP)\src\mutex_w32.c $(HDR)
985	$(LTCOMPILE) -c $(TOP)\src\mutex_w32.c
986
987notify.lo:	$(TOP)\src\notify.c $(HDR)
988	$(LTCOMPILE) -c $(TOP)\src\notify.c
989
990pager.lo:	$(TOP)\src\pager.c $(HDR) $(TOP)\src\pager.h
991	$(LTCOMPILE) -c $(TOP)\src\pager.c
992
993pcache.lo:	$(TOP)\src\pcache.c $(HDR) $(TOP)\src\pcache.h
994	$(LTCOMPILE) -c $(TOP)\src\pcache.c
995
996pcache1.lo:	$(TOP)\src\pcache1.c $(HDR) $(TOP)\src\pcache.h
997	$(LTCOMPILE) -c $(TOP)\src\pcache1.c
998
999os.lo:	$(TOP)\src\os.c $(HDR)
1000	$(LTCOMPILE) -c $(TOP)\src\os.c
1001
1002os_unix.lo:	$(TOP)\src\os_unix.c $(HDR)
1003	$(LTCOMPILE) -c $(TOP)\src\os_unix.c
1004
1005os_win.lo:	$(TOP)\src\os_win.c $(HDR)
1006	$(LTCOMPILE) -c $(TOP)\src\os_win.c
1007
1008pragma.lo:	$(TOP)\src\pragma.c $(HDR)
1009	$(LTCOMPILE) -c $(TOP)\src\pragma.c
1010
1011prepare.lo:	$(TOP)\src\prepare.c $(HDR)
1012	$(LTCOMPILE) -c $(TOP)\src\prepare.c
1013
1014printf.lo:	$(TOP)\src\printf.c $(HDR)
1015	$(LTCOMPILE) -c $(TOP)\src\printf.c
1016
1017random.lo:	$(TOP)\src\random.c $(HDR)
1018	$(LTCOMPILE) -c $(TOP)\src\random.c
1019
1020resolve.lo:	$(TOP)\src\resolve.c $(HDR)
1021	$(LTCOMPILE) -c $(TOP)\src\resolve.c
1022
1023rowset.lo:	$(TOP)\src\rowset.c $(HDR)
1024	$(LTCOMPILE) -c $(TOP)\src\rowset.c
1025
1026select.lo:	$(TOP)\src\select.c $(HDR)
1027	$(LTCOMPILE) -c $(TOP)\src\select.c
1028
1029status.lo:	$(TOP)\src\status.c $(HDR)
1030	$(LTCOMPILE) -c $(TOP)\src\status.c
1031
1032table.lo:	$(TOP)\src\table.c $(HDR)
1033	$(LTCOMPILE) -c $(TOP)\src\table.c
1034
1035tokenize.lo:	$(TOP)\src\tokenize.c keywordhash.h $(HDR)
1036	$(LTCOMPILE) -c $(TOP)\src\tokenize.c
1037
1038trigger.lo:	$(TOP)\src\trigger.c $(HDR)
1039	$(LTCOMPILE) -c $(TOP)\src\trigger.c
1040
1041update.lo:	$(TOP)\src\update.c $(HDR)
1042	$(LTCOMPILE) -c $(TOP)\src\update.c
1043
1044utf.lo:	$(TOP)\src\utf.c $(HDR)
1045	$(LTCOMPILE) -c $(TOP)\src\utf.c
1046
1047util.lo:	$(TOP)\src\util.c $(HDR)
1048	$(LTCOMPILE) -c $(TOP)\src\util.c
1049
1050vacuum.lo:	$(TOP)\src\vacuum.c $(HDR)
1051	$(LTCOMPILE) -c $(TOP)\src\vacuum.c
1052
1053vdbe.lo:	$(TOP)\src\vdbe.c $(HDR)
1054	$(LTCOMPILE) -c $(TOP)\src\vdbe.c
1055
1056vdbeapi.lo:	$(TOP)\src\vdbeapi.c $(HDR)
1057	$(LTCOMPILE) -c $(TOP)\src\vdbeapi.c
1058
1059vdbeaux.lo:	$(TOP)\src\vdbeaux.c $(HDR)
1060	$(LTCOMPILE) -c $(TOP)\src\vdbeaux.c
1061
1062vdbeblob.lo:	$(TOP)\src\vdbeblob.c $(HDR)
1063	$(LTCOMPILE) -c $(TOP)\src\vdbeblob.c
1064
1065vdbemem.lo:	$(TOP)\src\vdbemem.c $(HDR)
1066	$(LTCOMPILE) -c $(TOP)\src\vdbemem.c
1067
1068vdbesort.lo:	$(TOP)\src\vdbesort.c $(HDR)
1069	$(LTCOMPILE) -c $(TOP)\src\vdbesort.c
1070
1071vdbetrace.lo:	$(TOP)\src\vdbetrace.c $(HDR)
1072	$(LTCOMPILE) -c $(TOP)\src\vdbetrace.c
1073
1074vtab.lo:	$(TOP)\src\vtab.c $(HDR)
1075	$(LTCOMPILE) -c $(TOP)\src\vtab.c
1076
1077wal.lo:	$(TOP)\src\wal.c $(HDR)
1078	$(LTCOMPILE) -c $(TOP)\src\wal.c
1079
1080walker.lo:	$(TOP)\src\walker.c $(HDR)
1081	$(LTCOMPILE) -c $(TOP)\src\walker.c
1082
1083where.lo:	$(TOP)\src\where.c $(HDR)
1084	$(LTCOMPILE) -c $(TOP)\src\where.c
1085
1086tclsqlite.lo:	$(TOP)\src\tclsqlite.c $(HDR)
1087	$(LTCOMPILE) -DUSE_TCL_STUBS=1 -DBUILD_sqlite -I$(TCLINCDIR) -c $(TOP)\src\tclsqlite.c
1088
1089tclsqlite-shell.lo:	$(TOP)\src\tclsqlite.c $(HDR)
1090	$(LTCOMPILE) -DTCLSH=1 -DBUILD_sqlite -I$(TCLINCDIR) -c $(TOP)\src\tclsqlite.c
1091
1092tclsqlite3.exe:	tclsqlite-shell.lo libsqlite3.lib $(LIBRESOBJS)
1093	$(LD) $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) /OUT:$@ libsqlite3.lib tclsqlite-shell.lo $(LIBRESOBJS) $(LTLIBS) $(TLIBS)
1094
1095# Rules to build opcodes.c and opcodes.h
1096#
1097opcodes.c:	opcodes.h $(TOP)\mkopcodec.awk
1098	$(NAWK) -f $(TOP)\mkopcodec.awk opcodes.h > opcodes.c
1099
1100opcodes.h:	parse.h $(TOP)\src\vdbe.c $(TOP)\mkopcodeh.awk
1101	type parse.h $(TOP)\src\vdbe.c | $(NAWK) -f $(TOP)\mkopcodeh.awk > opcodes.h
1102
1103# Rules to build parse.c and parse.h - the outputs of lemon.
1104#
1105parse.h:	parse.c
1106
1107parse.c:	$(TOP)\src\parse.y lemon.exe $(TOP)\addopcodes.awk
1108	del /Q parse.y parse.h parse.h.temp
1109	copy $(TOP)\src\parse.y .
1110	.\lemon.exe $(OPT_FEATURE_FLAGS) $(OPTS) parse.y
1111	move parse.h parse.h.temp
1112	$(NAWK) -f $(TOP)\addopcodes.awk parse.h.temp > parse.h
1113
1114sqlite3.h:	$(TOP)\src\sqlite.h.in $(TOP)\manifest.uuid $(TOP)\VERSION
1115	$(TCLSH_CMD) $(TOP)\tool\mksqlite3h.tcl $(TOP) > sqlite3.h
1116
1117mkkeywordhash.exe:	$(TOP)\tool\mkkeywordhash.c
1118	$(BCC) -Fe$@ $(OPT_FEATURE_FLAGS) $(OPTS) $(TOP)\tool\mkkeywordhash.c /link $(NLTLIBPATHS)
1119
1120keywordhash.h:	$(TOP)\tool\mkkeywordhash.c mkkeywordhash.exe
1121	.\mkkeywordhash.exe > keywordhash.h
1122
1123
1124
1125# Rules to build the extension objects.
1126#
1127icu.lo:	$(TOP)\ext\icu\icu.c $(HDR) $(EXTHDR)
1128	$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\icu\icu.c
1129
1130fts2.lo:	$(TOP)\ext\fts2\fts2.c $(HDR) $(EXTHDR)
1131	$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2.c
1132
1133fts2_hash.lo:	$(TOP)\ext\fts2\fts2_hash.c $(HDR) $(EXTHDR)
1134	$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_hash.c
1135
1136fts2_icu.lo:	$(TOP)\ext\fts2\fts2_icu.c $(HDR) $(EXTHDR)
1137	$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_icu.c
1138
1139fts2_porter.lo:	$(TOP)\ext\fts2\fts2_porter.c $(HDR) $(EXTHDR)
1140	$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_porter.c
1141
1142fts2_tokenizer.lo:	$(TOP)\ext\fts2\fts2_tokenizer.c $(HDR) $(EXTHDR)
1143	$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_tokenizer.c
1144
1145fts2_tokenizer1.lo:	$(TOP)\ext\fts2\fts2_tokenizer1.c $(HDR) $(EXTHDR)
1146	$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_tokenizer1.c
1147
1148fts3.lo:	$(TOP)\ext\fts3\fts3.c $(HDR) $(EXTHDR)
1149	$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3.c
1150
1151fts3_aux.lo:	$(TOP)\ext\fts3\fts3_aux.c $(HDR) $(EXTHDR)
1152	$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_aux.c
1153
1154fts3_expr.lo:	$(TOP)\ext\fts3\fts3_expr.c $(HDR) $(EXTHDR)
1155	$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_expr.c
1156
1157fts3_hash.lo:	$(TOP)\ext\fts3\fts3_hash.c $(HDR) $(EXTHDR)
1158	$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_hash.c
1159
1160fts3_icu.lo:	$(TOP)\ext\fts3\fts3_icu.c $(HDR) $(EXTHDR)
1161	$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_icu.c
1162
1163fts3_snippet.lo:	$(TOP)\ext\fts3\fts3_snippet.c $(HDR) $(EXTHDR)
1164	$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_snippet.c
1165
1166fts3_porter.lo:	$(TOP)\ext\fts3\fts3_porter.c $(HDR) $(EXTHDR)
1167	$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_porter.c
1168
1169fts3_tokenizer.lo:	$(TOP)\ext\fts3\fts3_tokenizer.c $(HDR) $(EXTHDR)
1170	$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_tokenizer.c
1171
1172fts3_tokenizer1.lo:	$(TOP)\ext\fts3\fts3_tokenizer1.c $(HDR) $(EXTHDR)
1173	$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_tokenizer1.c
1174
1175fts3_unicode.lo:	$(TOP)\ext\fts3\fts3_unicode.c $(HDR) $(EXTHDR)
1176	$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_unicode.c
1177
1178fts3_unicode2.lo:	$(TOP)\ext\fts3\fts3_unicode2.c $(HDR) $(EXTHDR)
1179	$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_unicode2.c
1180
1181fts3_write.lo:	$(TOP)\ext\fts3\fts3_write.c $(HDR) $(EXTHDR)
1182	$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_write.c
1183
1184rtree.lo:	$(TOP)\ext\rtree\rtree.c $(HDR) $(EXTHDR)
1185	$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\rtree\rtree.c
1186
1187
1188# Rules to build the 'testfixture' application.
1189#
1190# If using the amalgamation, use sqlite3.c directly to build the test
1191# fixture.  Otherwise link against libsqlite3.lib.  (This distinction is
1192# necessary because the test fixture requires non-API symbols which are
1193# hidden when the library is built via the amalgamation).
1194#
1195TESTFIXTURE_FLAGS = -DTCLSH=1 -DSQLITE_TEST=1 -DSQLITE_CRASH_TEST=1
1196TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_SERVER=1 -DSQLITE_PRIVATE="" -DSQLITE_CORE
1197
1198TESTFIXTURE_SRC0 = $(TESTSRC2) libsqlite3.lib
1199TESTFIXTURE_SRC1 = sqlite3.c
1200!IF $(USE_AMALGAMATION)==0
1201TESTFIXTURE_SRC = $(TESTSRC) $(TOP)\src\tclsqlite.c $(TESTFIXTURE_SRC0)
1202!ELSE
1203TESTFIXTURE_SRC = $(TESTSRC) $(TOP)\src\tclsqlite.c $(TESTFIXTURE_SRC1)
1204!ENDIF
1205
1206testfixture.exe:	$(TESTFIXTURE_SRC) $(LIBRESOBJS) $(HDR)
1207	$(LTLINK) -DSQLITE_NO_SYNC=1 $(TESTFIXTURE_FLAGS) \
1208		-DBUILD_sqlite -I$(TCLINCDIR) \
1209		$(TESTFIXTURE_SRC) \
1210		/link $(LTLINKOPTS) $(LTLIBPATHS) $(LIBRESOBJS) $(LTLIBS) $(TLIBS)
1211
1212fulltest:	testfixture.exe sqlite3.exe
1213	.\testfixture.exe $(TOP)\test\all.test
1214
1215soaktest:	testfixture.exe sqlite3.exe
1216	.\testfixture.exe $(TOP)\test\all.test -soak=1
1217
1218fulltestonly:	testfixture.exe sqlite3.exe
1219	.\testfixture.exe $(TOP)\test\full.test
1220
1221test:	testfixture.exe sqlite3.exe
1222	.\testfixture.exe $(TOP)\test\veryquick.test
1223
1224sqlite3_analyzer.c: sqlite3.c $(TOP)\src\test_stat.c $(TOP)\src\tclsqlite.c $(TOP)\tool\spaceanal.tcl
1225	copy sqlite3.c + $(TOP)\src\test_stat.c + $(TOP)\src\tclsqlite.c $@
1226	echo static const char *tclsh_main_loop(void){ >> $@
1227	echo static const char *zMainloop = >> $@
1228	$(NAWK) -f $(TOP)\tool\tostr.awk $(TOP)\tool\spaceanal.tcl >> $@
1229	echo ; return zMainloop; } >> $@
1230
1231sqlite3_analyzer.exe:	sqlite3_analyzer.c $(LIBRESOBJS)
1232	$(LTLINK) -DBUILD_sqlite -DTCLSH=2 -I$(TCLINCDIR) sqlite3_analyzer.c \
1233		/link $(LTLINKOPTS) $(LTLIBPATHS) $(LIBRESOBJS) $(LTLIBS) $(TLIBS)
1234
1235clean:
1236	del /Q *.lo *.ilk *.lib *.obj *.pdb sqlite3.exe libsqlite3.lib
1237	del /Q *.da *.bb *.bbg gmon.out
1238	del /Q sqlite3.h opcodes.c opcodes.h
1239	del /Q lemon.exe lempar.c parse.*
1240	del /Q mkkeywordhash.exe keywordhash.h
1241	-rmdir /Q/S .deps
1242	-rmdir /Q/S .libs
1243	-rmdir /Q/S quota2a
1244	-rmdir /Q/S quota2b
1245	-rmdir /Q/S quota2c
1246	-rmdir /Q/S tsrc
1247	del /Q .target_source
1248	del /Q tclsqlite3.exe tclsqlite3.exp
1249	del /Q testfixture.exe testfixture.exp test.db
1250	del /Q sqlite3.dll sqlite3.lib sqlite3.exp sqlite3.def
1251	del /Q sqlite3.c
1252	del /Q sqlite3rc.h
1253	del /Q sqlite3_analyzer.exe sqlite3_analyzer.exp sqlite3_analyzer.c
1254	del /Q sqlite-*-output.vsix
1255
1256# Dynamic link library section.
1257#
1258dll: sqlite3.dll
1259
1260sqlite3.def: libsqlite3.lib
1261	echo EXPORTS > sqlite3.def
1262	dumpbin /all libsqlite3.lib \
1263		| $(NAWK) "/ 1 _?sqlite3_/ { sub(/^.* _?/,\"\");print }" \
1264		| sort >> sqlite3.def
1265
1266sqlite3.dll: $(LIBOBJ) $(LIBRESOBJS) sqlite3.def
1267	$(LD) $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) /DLL /DEF:sqlite3.def /OUT:$@ $(LIBOBJ) $(LIBRESOBJS) $(LTLIBS) $(TLIBS)
1268