Add Travis CI config.
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..d2d6eea
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,162 @@
+# Build matrix / environment variables are explained on:
+# http://about.travis-ci.org/docs/user/build-configuration/
+# This file can be validated on: http://lint.travis-ci.org/
+
+language: c
+dist: xenial
+osx_image: xcode10.2
+
+compiler:
+- gcc
+- clang
+os:
+- linux
+- osx
+
+env:
+# Default configuration. No explicit options.
+- NAME=Default
+  FEATURE_CONFIG=""
+  FEATURE_DEFINES=""
+# The list of recommended compile-time options from the SQLite documentation.
+# https://www.sqlite.org/compile.html#recommended_compile_time_options
+- NAME=Recommended
+  FEATURE_CONFIG="--enable-tcl --disable-threadsafe"
+  FEATURE_DEFINES="
+    -DSQLITE_DEFAULT_MEMSTATUS=0
+    -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1
+    -DSQLITE_LIKE_DOESNT_MATCH_BLOBS
+    -DSQLITE_MAX_EXPR_DEPTH=0
+    -DSQLITE_OMIT_DECLTYPE
+    -DSQLITE_OMIT_DEPRECATED
+    -DSQLITE_OMIT_PROGRESS_CALLBACK
+    -DSQLITE_OMIT_SHARED_CACHE
+    -DSQLITE_THREADSAFE=0
+    -DSQLITE_USE_ALLOCA"
+# Maximum coverage. All extensions enabled, debugging assertions turned on.
+- NAME=Debug
+  FEATURE_CONFIG="--enable-tcl --enable-threadsafe"
+  FEATURE_DEFINES="
+    -DSQLITE_DEBUG
+    -DSQLITE_MEMDEBUG
+    -DSQLITE_ENABLE_ATOMIC_WRITE
+    -DSQLITE_ENABLE_BATCH_ATOMIC_WRITE
+    -DSQLITE_ENABLE_COLUMN_METADATA
+    -DSQLITE_ENABLE_DBPAGE_VTAB
+    -DSQLITE_ENABLE_DBSTAT_VTAB
+    -DSQLITE_ENABLE_DESERIALIZE
+    -DSQLITE_ENABLE_EXPLAIN_COMMENTS
+    -DSQLITE_ENABLE_FTS3
+    -DSQLITE_ENABLE_FTS3_PARENTHESIS
+    -DSQLITE_ENABLE_FTS3_TOKENIZER
+    -DSQLITE_ENABLE_FTS4
+    -DSQLITE_ENABLE_FTS5
+    -DSQLITE_ENABLE_GEOPOLY
+    -DSQLITE_ENABLE_JSON1
+    -DSQLITE_ENABLE_ICU
+    -DSQLITE_ENABLE_MEMORY_MANAGEMENT
+    -DSQLITE_ENABLE_RBU
+    -DSQLITE_ENABLE_RTREE
+    -DSQLITE_ENABLE_SESSION
+    -DSQLITE_ENABLE_SNAPSHOT
+    -DSQLITE_ENABLE_STMT_SCANSTATUS
+    -DSQLITE_ENABLE_STMTVTAB
+    -DSQLITE_ENABLE_STAT4
+    -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT
+    -DSQLITE_INTROSPECTION_PRAGMAS
+    -DSQLITE_THREADSAFE=1
+    -DSQLITE_USE_ALLOCA"
+# Chromium's configuration.
+- NAME=Chromium
+  FEATURE_CONFIG="--enable-tcl --enable-threadsafe"
+  FEATURE_DEFINES="
+    -DSQLITE_DEFAULT_FILE_PERMISSIONS=0600
+    -DSQLITE_DEFAULT_LOOKASIDE=0,0
+    -DSQLITE_DEFAULT_MEMSTATUS=1
+    -DSQLITE_DEFAULT_PAGE_SIZE=4096
+    -DSQLITE_DEFAULT_PCACHE_INITSZ=0
+    -DSQLITE_DISABLE_FTS3_UNICODE
+    -DSQLITE_DISABLE_FTS4_DEFERRED
+    -DSQLITE_ENABLE_BATCH_ATOMIC_WRITE
+    -DSQLITE_ENABLE_FTS3
+    -DSQLITE_ENABLE_ICU
+    -DSQLITE_HAVE_ISNAN
+    -DSQLITE_LIKE_DOESNT_MATCH_BLOBS
+    -DSQLITE_MAX_MMAP_SIZE=268435456
+    -DSQLITE_MAX_WORKER_THREADS=0
+    -DSQLITE_OMIT_ANALYZE
+    -DSQLITE_OMIT_AUTOINIT
+    -DSQLITE_OMIT_AUTORESET
+    -DSQLITE_OMIT_COMPILEOPTION_DIAGS
+    -DSQLITE_OMIT_COMPLETE
+    -DSQLITE_OMIT_DECLTYPE
+    -DSQLITE_OMIT_DEPRECATED
+    -DSQLITE_OMIT_EXPLAIN
+    -DSQLITE_OMIT_GET_TABLE
+    -DSQLITE_OMIT_LOAD_EXTENSION
+    -DSQLITE_OMIT_LOOKASIDE
+    -DSQLITE_OMIT_PROGRESS_CALLBACK
+    -DSQLITE_OMIT_REINDEX
+    -DSQLITE_OMIT_SHARED_CACHE
+    -DSQLITE_OMIT_TRACE
+    -DSQLITE_OMIT_UPSERT
+    -DSQLITE_OMIT_WINDOWFUNC
+    -DSQLITE_SECURE_DELETE
+    -DSQLITE_TEMP_STORE=3
+    -DSQLITE_USE_ALLOCA"
+
+addons:
+  apt:
+    sources:
+    - ubuntu-toolchain-r-test
+    - llvm-toolchain-xenial-8
+    packages:
+    - clang-8
+    - gcc-9
+    - libicu-dev
+    - tcl8.6-dev
+  homebrew:
+    packages:
+    - gcc@9
+    - icu4c
+    - llvm@8
+    - tcl-tk
+    update: true
+
+install:
+# The following Homebrew packages aren't linked by default, and need to be
+# prepended to the path explicitly.
+- if [ "$TRAVIS_OS_NAME" == "osx" ]; then
+    export PATH="$(brew --prefix icu4c)/bin:$PATH";
+    export PATH="$(brew --prefix llvm)/bin:$PATH";
+    export PATH="$(brew --prefix tcl-tk)/bin:$PATH";
+  fi
+# macOS compilers installed from Homebrew need help finding system headers.
+# The system headers need to be preceded by the current directory in the include
+# path, otherwise #include "sqlite.h" resolves to the header in the macOS SDK.
+- if [ "$TRAVIS_OS_NAME" == "osx" ]; then
+    export CFLAGS="-I. -I$(xcrun --show-sdk-path)/usr/include";
+  fi
+# /usr/bin/gcc points to an older compiler on both Linux and macOS.
+- if [ "$CC" = "gcc" ]; then export CC="gcc-9"; fi
+# /usr/bin/clang points to an older compiler on both Linux and macOS.
+- if [ "$CC" = "clang" ]; then export CC="clang-8"; fi
+- echo ${CC}
+- ${CC} --version
+
+before_script:
+- mkdir -p build && cd build
+# -w silences compiler warnigns, to reduce the output log size.
+- ../configure CFLAGS="-w $CFLAGS $FEATURE_DEFINES $(icu-config --cppflags)"
+    LDFLAGS="$(icu-config --ldflags) -lm" $FEATURE_CONFIG --enable-amalgamation
+
+script:
+# Tested targets:
+# - fulltest: runs for longer than the Travis CI limit of 50 minutes
+# - fulltestonly: exceeds the Travis CI log limit
+# - test: passes
+# Untested targets:
+# - tcltest: subset of test, which passes
+# - quicktest: subset of test, which passes
+# - soaktest: longer than fulltest, which exceeds the time limit
+- make test