add -bootstrap option to avogen

This commit is contained in:
Michael McLoughlin
2018-11-25 17:11:24 -08:00
parent b99b2cdbbf
commit 09848512cc
4 changed files with 25 additions and 14 deletions

View File

@@ -8,6 +8,7 @@ import (
"path/filepath" "path/filepath"
"github.com/mmcloughlin/avo/internal/gen" "github.com/mmcloughlin/avo/internal/gen"
"github.com/mmcloughlin/avo/internal/inst"
"github.com/mmcloughlin/avo/internal/load" "github.com/mmcloughlin/avo/internal/load"
) )
@@ -17,15 +18,20 @@ var generators = map[string]gen.Builder{
"godatatest": gen.NewGoDataTest, "godatatest": gen.NewGoDataTest,
} }
var datadir = flag.String( // Command-line flags.
var (
bootstrap = flag.Bool("bootstrap", false, "regenerate instruction list from original data")
datadir = flag.String(
"data", "data",
filepath.Join(build.Default.GOPATH, "src/github.com/mmcloughlin/avo/internal/data"), filepath.Join(build.Default.GOPATH, "src/github.com/mmcloughlin/avo/internal/data"),
"path to data directory", "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() { func main() {
log.SetPrefix("avogen: ")
log.SetFlags(0)
flag.Parse() flag.Parse()
// Build generator. // Build generator.
@@ -51,11 +57,16 @@ func main() {
} }
// Load instructions. // Load instructions.
is := inst.Instructions
if *bootstrap {
log.Printf("bootstrap: loading instructions from data directory %s", *datadir)
l := load.NewLoaderFromDataDir(*datadir) l := load.NewLoaderFromDataDir(*datadir)
is, err := l.Load() r, err := l.Load()
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
is = r
}
// Generate output. // Generate output.
b, err := g.Generate(is) b, err := g.Generate(is)

View File

@@ -1,7 +1,7 @@
package inst package inst
//go:generate avogen -data ../data -output ztable.go godata //go:generate avogen -bootstrap -data ../data -output ztable.go godata
//go:generate avogen -data ../data -output ztable_test.go godatatest //go:generate avogen -bootstrap -data ../data -output ztable_test.go godatatest
func Lookup(opcode string) (Instruction, bool) { func Lookup(opcode string) (Instruction, bool) {
for _, i := range Instructions { for _, i := range Instructions {

View File

@@ -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 package inst

View File

@@ -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 package inst_test