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