diff --git a/internal/cmd/avogen/main.go b/internal/cmd/avogen/main.go index 775c70b..bd21789 100644 --- a/internal/cmd/avogen/main.go +++ b/internal/cmd/avogen/main.go @@ -8,6 +8,7 @@ import ( "path/filepath" "github.com/mmcloughlin/avo/internal/gen" + "github.com/mmcloughlin/avo/internal/inst" "github.com/mmcloughlin/avo/internal/load" ) @@ -17,15 +18,20 @@ var generators = map[string]gen.Builder{ "godatatest": gen.NewGoDataTest, } -var datadir = flag.String( - "data", - filepath.Join(build.Default.GOPATH, "src/github.com/mmcloughlin/avo/internal/data"), - "path to data directory", +// Command-line flags. +var ( + bootstrap = flag.Bool("bootstrap", false, "regenerate instruction list from original data") + datadir = flag.String( + "data", + filepath.Join(build.Default.GOPATH, "src/github.com/mmcloughlin/avo/internal/data"), + "path to data directory", + ) + output = flag.String("output", "", "path to output file (default stdout)") ) -var output = flag.String("output", "", "path to output file (default stdout)") - func main() { + log.SetPrefix("avogen: ") + log.SetFlags(0) flag.Parse() // Build generator. @@ -51,10 +57,15 @@ func main() { } // Load instructions. - l := load.NewLoaderFromDataDir(*datadir) - is, err := l.Load() - if err != nil { - log.Fatal(err) + is := inst.Instructions + if *bootstrap { + log.Printf("bootstrap: loading instructions from data directory %s", *datadir) + l := load.NewLoaderFromDataDir(*datadir) + r, err := l.Load() + if err != nil { + log.Fatal(err) + } + is = r } // Generate output. diff --git a/internal/inst/table.go b/internal/inst/table.go index 9681496..11c915d 100644 --- a/internal/inst/table.go +++ b/internal/inst/table.go @@ -1,7 +1,7 @@ package inst -//go:generate avogen -data ../data -output ztable.go godata -//go:generate avogen -data ../data -output ztable_test.go godatatest +//go:generate avogen -bootstrap -data ../data -output ztable.go godata +//go:generate avogen -bootstrap -data ../data -output ztable_test.go godatatest func Lookup(opcode string) (Instruction, bool) { for _, i := range Instructions { diff --git a/internal/inst/ztable.go b/internal/inst/ztable.go index 484756a..656c902 100644 --- a/internal/inst/ztable.go +++ b/internal/inst/ztable.go @@ -1,4 +1,4 @@ -// Code generated by command: avogen -data ../data -output ztable.go godata. DO NOT EDIT. +// Code generated by command: avogen -bootstrap -data ../data -output ztable.go godata. DO NOT EDIT. package inst diff --git a/internal/inst/ztable_test.go b/internal/inst/ztable_test.go index 089ef18..7a80472 100644 --- a/internal/inst/ztable_test.go +++ b/internal/inst/ztable_test.go @@ -1,4 +1,4 @@ -// Code generated by command: avogen -data ../data -output ztable_test.go godatatest. DO NOT EDIT. +// Code generated by command: avogen -bootstrap -data ../data -output ztable_test.go godatatest. DO NOT EDIT. package inst_test