package rosa import ( "sync" "hakurei.app/internal/pkg" ) // PArtifact is a lazily-initialised [pkg.Artifact] preset. type PArtifact int const ( ACL PArtifact = iota ArgpStandalone Attr Autoconf Automake BC Bash Binutils Bison Bzip2 CMake Coreutils Curl DTC Diffutils Elfutils Findutils Flex Fuse GMP GLib Gawk Gettext Git Go Gperf Grep Gzip Hakurei HakureiDist IniConfig KernelHeaders KernelSource Kmod LibXau Libexpat Libiconv Libpsl Libffi Libgd Libtool Libseccomp Libucontext Libxml2 M4 MPC MPFR Make Meson Mksh MuslFts MuslObstack NSS NSSCACert Ninja OpenSSL PCRE2 Packaging Patch Perl PkgConfig Pluggy Procps PyTest Pygments Python QEMU Rsync Sed Setuptools SquashfsTools TamaGo Texinfo Toybox toyboxEarly Unzip UtilLinux Wayland WaylandProtocols XCB XCBProto Xproto XZ Zlib Zstd buildcatrust utilMacros // gcc is a hacked-to-pieces GCC toolchain meant for use in intermediate // stages only. This preset and its direct output must never be exposed. gcc // Stage0 is a tarball containing all compile-time dependencies of artifacts // part of the [Std] toolchain. Stage0 // _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] } // ResolveName returns a [PArtifact] by name. func ResolveName(name string) (p PArtifact, ok bool) { p, ok = map[string]PArtifact{ "acl": ACL, "argp-standalone": ArgpStandalone, "attr": Attr, "autoconf": Autoconf, "automake": Automake, "bc": BC, "bash": Bash, "binutils": Binutils, "bison": Bison, "bzip2": Bzip2, "cmake": CMake, "coreutils": Coreutils, "curl": Curl, "dtc": DTC, "diffutils": Diffutils, "elfutils": Elfutils, "findutils": Findutils, "flex": Flex, "fuse": Fuse, "gmp": GMP, "glib": GLib, "gawk": Gawk, "gettext": Gettext, "git": Git, "go": Go, "gperf": Gperf, "grep": Grep, "gzip": Gzip, "hakurei": Hakurei, "hakurei-dist": HakureiDist, "iniconfig": IniConfig, "kernel-headers": KernelHeaders, "kernel-source": KernelSource, "kmod": Kmod, "libXau": LibXau, "libexpat": Libexpat, "libiconv": Libiconv, "libpsl": Libpsl, "libseccomp": Libseccomp, "libucontext": Libucontext, "libxml2": Libxml2, "libffi": Libffi, "libgd": Libgd, "libtool": Libtool, "m4": M4, "mpc": MPC, "mpfr": MPFR, "make": Make, "meson": Meson, "mksh": Mksh, "musl-fts": MuslFts, "musl-obstack": MuslObstack, "nss": NSS, "nss-cacert": NSSCACert, "ninja": Ninja, "openssl": OpenSSL, "pcre2": PCRE2, "packaging": Packaging, "patch": Patch, "perl": Perl, "pkg-config": PkgConfig, "pluggy": Pluggy, "procps": Procps, "pytest": PyTest, "pygments": Pygments, "python": Python, "qemu": QEMU, "rsync": Rsync, "sed": Sed, "setuptools": Setuptools, "squashfs-tools": SquashfsTools, "tamago": TamaGo, "texinfo": Texinfo, "toybox": Toybox, "unzip": Unzip, "util-linux": UtilLinux, "wayland": Wayland, "wayland-protocols": WaylandProtocols, "xcb": XCB, "xcb-proto": XCBProto, "xproto": Xproto, "xz": XZ, "zlib": Zlib, "zstd": Zstd, }[name] return }