package rosa import ( "sync" "hakurei.app/internal/pkg" ) // PArtifact is a lazily-initialised [pkg.Artifact] preset. type PArtifact int const ( ACL PArtifact = iota Attr Autoconf Bash Busybox CMake Coreutils Diffutils Gettext Git Go Gperf Hakurei KernelHeaders LibXau Libexpat Libffi Libgd Libseccomp Libxml2 M4 Make Meson Ninja Patch Perl PkgConfig Python Rsync Setuptools Wayland WaylandProtocols XCB XCBProto Xproto 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] }