diff options
Diffstat (limited to 'internal/rosa/all.go')
| -rw-r--r-- | internal/rosa/all.go | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/internal/rosa/all.go b/internal/rosa/all.go new file mode 100644 index 00000000..68ae8e91 --- /dev/null +++ b/internal/rosa/all.go @@ -0,0 +1,53 @@ +package rosa + +import ( + "sync" + + "hakurei.app/internal/pkg" +) + +// PArtifact is a lazily-initialised [pkg.Artifact] preset. +type PArtifact int + +const ( + Autoconf PArtifact = iota + Bash + Busybox + CMake + Coreutils + Diffutils + Gettext + Git + Go + KernelHeaders + Libffi + M4 + Make + Ninja + Perl + Patch + Python + Rsync + Zlib + + // _presetEnd is the total number of presets and does not denote a preset. + _presetEnd +) + +var ( + // artifactsF is an array of functions for the result of [PArtifact]. + artifactsF [_presetEnd]func(t Toolchain) pkg.Artifact + + // artifacts stores the result of artifactsF. + artifacts [_toolchainEnd][len(artifactsF)]pkg.Artifact + // artifactsOnce is for lazy initialisation of artifacts. + artifactsOnce [_toolchainEnd][len(artifactsF)]sync.Once +) + +// Load returns the resulting [pkg.Artifact] of [PArtifact]. +func (t Toolchain) Load(p PArtifact) pkg.Artifact { + artifactsOnce[t][p].Do(func() { + artifacts[t][p] = artifactsF[p](t) + }) + return artifacts[t][p] +} |
