diff options
Diffstat (limited to 'cmd/mbf/main.go')
| -rw-r--r-- | cmd/mbf/main.go | 92 |
1 files changed, 56 insertions, 36 deletions
diff --git a/cmd/mbf/main.go b/cmd/mbf/main.go index db5e80af..83bb6714 100644 --- a/cmd/mbf/main.go +++ b/cmd/mbf/main.go @@ -109,46 +109,66 @@ func main() { ) } - c.NewCommand( - "stage3", - "Check for toolchain 3-stage non-determinism", - func(args []string) (err error) { - _, _, _, stage1 := (rosa.Std - 2).NewLLVM() - _, _, _, stage2 := (rosa.Std - 1).NewLLVM() - _, _, _, stage3 := rosa.Std.NewLLVM() - var ( - pathname *check.Absolute - checksum [2]unique.Handle[pkg.Checksum] - ) + { + var ( + flagStage0 bool + ) + c.NewCommand( + "stage3", + "Check for toolchain 3-stage non-determinism", + func(args []string) (err error) { + _, _, _, stage1 := (rosa.Std - 2).NewLLVM() + _, _, _, stage2 := (rosa.Std - 1).NewLLVM() + _, _, _, stage3 := rosa.Std.NewLLVM() + var ( + pathname *check.Absolute + checksum [2]unique.Handle[pkg.Checksum] + ) - if pathname, _, err = cache.Cure(stage1); err != nil { - return err - } - log.Println("stage1:", pathname) + if pathname, _, err = cache.Cure(stage1); err != nil { + return err + } + log.Println("stage1:", pathname) - if pathname, checksum[0], err = cache.Cure(stage2); err != nil { - return err - } - log.Println("stage2:", pathname) - if pathname, checksum[1], err = cache.Cure(stage3); err != nil { - return err - } - log.Println("stage3:", pathname) + if pathname, checksum[0], err = cache.Cure(stage2); err != nil { + return err + } + log.Println("stage2:", pathname) + if pathname, checksum[1], err = cache.Cure(stage3); err != nil { + return err + } + log.Println("stage3:", pathname) - if checksum[0] != checksum[1] { - err = &pkg.ChecksumMismatchError{ - Got: checksum[0].Value(), - Want: checksum[1].Value(), + if checksum[0] != checksum[1] { + err = &pkg.ChecksumMismatchError{ + Got: checksum[0].Value(), + Want: checksum[1].Value(), + } + } else { + log.Println( + "stage2 is identical to stage3", + "("+pkg.Encode(checksum[0].Value())+")", + ) } - } else { - log.Println( - "stage2 is identical to stage3", - "("+pkg.Encode(checksum[0].Value())+")", - ) - } - return - }, - ) + + if flagStage0 { + if pathname, _, err = cache.Cure( + rosa.Std.Load(rosa.Stage0), + ); err != nil { + return err + } + log.Println(pathname) + } + + return + }, + ). + Flag( + &flagStage0, + "stage0", command.BoolFlag(false), + "Create bootstrap stage0 tarball", + ) + } { var ( |
