diff options
Diffstat (limited to 'cmd/mbf/main.go')
| -rw-r--r-- | cmd/mbf/main.go | 59 |
1 files changed, 32 insertions, 27 deletions
diff --git a/cmd/mbf/main.go b/cmd/mbf/main.go index 0024275a..4beefe68 100644 --- a/cmd/mbf/main.go +++ b/cmd/mbf/main.go @@ -48,6 +48,11 @@ import ( "hakurei.app/cmd/mbf/internal/pkgserver/ui" ) +// builtin contains native and embedded [rosa.Artifact] registrations. +// +//go:linkname builtin hakurei.app/internal/rosa.builtin +var builtin rosa.S + // writeFileExcl is like [os.WriteFile], but sets [os.O_EXCL] instead. func writeFileExcl(name string, data []byte, perm os.FileMode) error { f, err := os.OpenFile(name, os.O_WRONLY|os.O_CREATE|os.O_EXCL, perm) @@ -114,7 +119,7 @@ func main() { addr net.UnixAddr ) c := command.New(os.Stderr, log.Printf, "mbf", func([]string) error { - if !rosa.Native().HasStageEarly() { + if !rosa.HasStageEarly() { return pkg.UnsupportedArchError(runtime.GOARCH) } @@ -141,13 +146,13 @@ func main() { if !flagCheck { flags |= rosa.OptSkipCheck } - if !flagLTO { - flags |= rosa.OptLLVMNoLTO + if flagLTO { + flags |= rosa.OptToolchainLTO } - rosa.Native().DropCaches("", flags) + builtin.DropCaches("", flags) cross := flagArch != "" && flagArch != runtime.GOARCH if flagQEMU || cross { - _, cm.qemu = rosa.Native().Std().MustLoad(rosa.H("qemu")) + _, cm.qemu = rosa.MustLoad(rosa.H("qemu")) } if cross { @@ -155,14 +160,14 @@ func main() { flags = flagCrossOverride } - rosa.Native().DropCaches(flagArch, flags) - if !rosa.Native().HasStageEarly() { + builtin.DropCaches(flagArch, flags) + if !rosa.HasStageEarly() { return pkg.UnsupportedArchError(flagArch) } } if flagSourcePath != "" { - if err := rosa.Native().SetSource(os.DirFS(flagSourcePath)); err != nil { + if err := builtin.SetSource(os.DirFS(flagSourcePath)); err != nil { return err } } @@ -173,7 +178,7 @@ func main() { return err } else if root, err = os.OpenRoot(a.String()); err != nil { return err - } else if err = rosa.Native().RegisterFS(root.FS()); err != nil { + } else if err = builtin.RegisterFS(root.FS()); err != nil { return err } } @@ -432,7 +437,7 @@ func main() { for range max(flagJobs, 1) { wg.Go(func() { for p := range w { - meta, _ := rosa.Native().Std().MustLoad(p) + meta, _ := rosa.MustLoad(p) if meta.ID == 0 { continue } @@ -462,7 +467,7 @@ func main() { } done: - for _, p := range rosa.Native().CollectAll() { + for _, p := range rosa.CollectAll() { select { case w <- p: break @@ -490,8 +495,8 @@ func main() { } c.NewCommand("blocked", command.UsageInternal, func([]string) error { - for _, p := range rosa.Native().CollectAll() { - meta, _ := rosa.Native().Std().Load(p) + for _, p := range rosa.CollectAll() { + meta, _ := rosa.Load(p) if meta.Blocked != "" { fmt.Printf("%s: %s\n", meta.Name, meta.Blocked) } @@ -631,7 +636,7 @@ func main() { _llvm := rosa.H("llvm") if err = cm.Do(func(cache *pkg.Cache) (err error) { - _, llvm := rosa.Native().New(rosa.Std - 2).Load(_llvm) + _, llvm := rosa.MustLoadAt(rosa.Std-2, _llvm) pathname, _, err = cache.Cure(llvm) return }); err != nil { @@ -640,7 +645,7 @@ func main() { log.Println("stage1:", pathname) if err = cm.Do(func(cache *pkg.Cache) (err error) { - _, llvm := rosa.Native().New(rosa.Std - 1).Load(_llvm) + _, llvm := rosa.MustLoadAt(rosa.Std-1, _llvm) pathname, _, err = cache.Cure(llvm) return }); err != nil { @@ -649,7 +654,7 @@ func main() { log.Println("stage2:", pathname) if err = cm.Do(func(cache *pkg.Cache) (err error) { - _, llvm := rosa.Native().New(rosa.Std).Load(_llvm) + _, llvm := rosa.MustLoadAt(rosa.Std, _llvm) pathname, checksum[0], err = cache.Cure(llvm) return }); err != nil { @@ -658,7 +663,7 @@ func main() { log.Println("stage3:", pathname) if err = cm.Do(func(cache *pkg.Cache) (err error) { - _, llvm := rosa.Native().New(rosa.Stage3).Load(_llvm) + _, llvm := rosa.MustLoadAt(rosa.Stage3, _llvm) pathname, checksum[1], err = cache.Cure(llvm) return }); err != nil { @@ -686,10 +691,10 @@ func main() { "all", command.UsageInternal, func([]string) error { - all := rosa.Native().CollectAll() + all := rosa.CollectAll() a := make(pkg.Collect, len(all)) for i, h := range all { - _, a[i] = rosa.Native().Std().Load(h) + _, a[i] = rosa.Load(h) } return cm.Do(func(cache *pkg.Cache) (err error) { _, _, err = cache.Cure(&a) @@ -740,12 +745,12 @@ func main() { return err } } - rosa.Native().SetGentooStage3(flagGentoo, checksum) + builtin.SetGentooStage3(flagGentoo, checksum) t -= 3 // magic number to discourage misuse } - _, a := rosa.Native().New(t).Load(rosa.ArtifactH(unique.Make(args[0]))) + _, a := rosa.LoadAt(t, rosa.ArtifactH(unique.Make(args[0]))) if a == nil { return fmt.Errorf("unknown artifact %q", args[0]) } @@ -965,7 +970,7 @@ func main() { return errors.New("validate must rebuild at least twice") } - _, a := rosa.Native().New(stage).Load(rosa.ArtifactH(unique.Make(args[1]))) + _, a := rosa.LoadAt(stage, rosa.ArtifactH(unique.Make(args[1]))) if a == nil { return fmt.Errorf("unknown artifact %q", args[1]) } @@ -1051,7 +1056,7 @@ func main() { "Remove identifiers not reachable by loaded packages", func([]string) error { return cm.Do(func(cache *pkg.Cache) error { - t := rosa.Native().Clone().Std() + t := rosa.New().Std() handles := t.CollectAll() flags := t.Flags() @@ -1061,7 +1066,7 @@ func main() { continue } - t.DropCaches(arch, rosa.OptLLVMNoLTO|rosa.OptSkipCheck) + t.DropCaches(arch, rosa.OptSkipCheck) a = t.Append(a, handles...) t.DropCaches(arch, flags) a = t.Append(a, handles...) @@ -1117,7 +1122,7 @@ func main() { handles := make([]rosa.ArtifactH, len(args), len(args)+3) for i, arg := range args { handles[i] = rosa.ArtifactH(unique.Make(arg)) - if meta, _ := rosa.Native().Std().Load(handles[i]); meta == nil { + if meta, _ := rosa.Load(handles[i]); meta == nil { return fmt.Errorf("unknown artifact %q", arg) } } @@ -1134,14 +1139,14 @@ func main() { root := make(pkg.Collect, 0, 6+len(args)) root = append(root, rosa.NewEtc(false)) - root = rosa.Native().Std().Append(root, handles...) + root = builtin.Std().Append(root, handles...) return cm.Do(func(cache *pkg.Cache) error { return cache.EnterExec( ctx, pkg.NewExec( "", - rosa.Native().Arch(), + builtin.Arch(), new(pkg.Checksum), 1, flagNet, |
