diff --git a/build/builder.go b/build/builder.go
index fa8d905..1c41bc7 100644
--- a/build/builder.go
+++ b/build/builder.go
@@ -18,6 +18,7 @@
 
 import (
 	"crypto/sha1"
+	"flag"
 	"fmt"
 	"io"
 	"io/ioutil"
@@ -95,6 +96,29 @@
 	return fmt.Sprintf("%x", hasher.Sum(nil))
 }
 
+type largeFilesFlag struct{ *Options }
+
+func (f largeFilesFlag) String() string {
+	s := append([]string{""}, f.LargeFiles...)
+	return strings.Join(s, "-large_file ")
+}
+
+func (f largeFilesFlag) Set(value string) error {
+	f.LargeFiles = append(f.LargeFiles, value)
+	return nil
+}
+
+// Flags adds flags for build options to fs.
+func (o *Options) Flags(fs *flag.FlagSet) {
+	fs.IntVar(&o.SizeMax, "file_limit", 2<<20, "maximum file size")
+	fs.IntVar(&o.TrigramMax, "max_trigram_count", 20000, "maximum number of trigrams per document")
+	fs.IntVar(&o.ShardMax, "shard_limit", 100<<20, "maximum corpus size for a shard")
+	fs.IntVar(&o.Parallelism, "parallelism", 4, "maximum number of parallel indexing processes.")
+	fs.StringVar(&o.IndexDir, "index", DefaultDir, "directory for search indices")
+	fs.BoolVar(&o.CTagsMustSucceed, "require_ctags", false, "If set, ctags calls must succeed.")
+	fs.Var(largeFilesFlag{o}, "large_file", "A glob pattern where matching files are to be index regardless of their size. You can add multiple patterns by setting this more than once.")
+}
+
 // Builder manages (parallel) creation of uniformly sized shards. The
 // builder buffers up documents until it collects enough documents and
 // then builds a shard and writes.
diff --git a/cmd/flags.go b/cmd/flags.go
index 27cca86..e0b9005 100644
--- a/cmd/flags.go
+++ b/cmd/flags.go
@@ -19,37 +19,18 @@
 	"fmt"
 	"os"
 	"path/filepath"
-	"strings"
 
 	"github.com/google/zoekt"
 	"github.com/google/zoekt/build"
 )
 
-type largeFilesFlag []string
-
-func (f *largeFilesFlag) String() string {
-	s := append([]string{""}, *f...)
-	return strings.Join(s, "-large_file ")
-}
-
-func (f *largeFilesFlag) Set(value string) error {
-	*f = append(*f, value)
-	return nil
-}
-
 var (
-	sizeMax     = flag.Int("file_limit", 2<<20, "maximum file size")
-	trigramMax  = flag.Int("max_trigram_count", 20000, "maximum number of trigrams per document")
-	shardLimit  = flag.Int("shard_limit", 100<<20, "maximum corpus size for a shard")
-	parallelism = flag.Int("parallelism", 4, "maximum number of parallel indexing processes.")
-	indexDir    = flag.String("index", build.DefaultDir, "directory for search indices")
-	version     = flag.Bool("version", false, "Print version number")
-	ctags       = flag.Bool("require_ctags", false, "If set, ctags calls must succeed.")
-	largeFiles  = largeFilesFlag{}
+	version = flag.Bool("version", false, "Print version number")
+	opts    = &build.Options{}
 )
 
 func init() {
-	flag.Var(&largeFiles, "large_file", "A glob pattern where matching files are to be index regardless of their size. You can add multiple patterns by setting this more than once.")
+	opts.Flags(flag.CommandLine)
 }
 
 func OptionsFromFlags() *build.Options {
@@ -59,15 +40,6 @@
 		os.Exit(0)
 	}
 
-	opts := &build.Options{
-		Parallelism:      *parallelism,
-		SizeMax:          *sizeMax,
-		ShardMax:         *shardLimit,
-		IndexDir:         *indexDir,
-		CTagsMustSucceed: *ctags,
-		LargeFiles:       largeFiles,
-		TrigramMax:       *trigramMax,
-	}
 	opts.SetDefaults()
 	return opts
 }
