All checks were successful
Test / Create distribution (push) Successful in 2m21s
Test / Sandbox (push) Successful in 5m17s
Test / Hakurei (push) Successful in 10m39s
Test / ShareFS (push) Successful in 12m32s
Test / Hakurei (race detector) (push) Successful in 3m28s
Test / Hpkg (push) Successful in 5m42s
Test / Sandbox (race detector) (push) Successful in 2m20s
Test / Flake checks (push) Successful in 1m44s
Initially, libarchive was going to be used, but its test suite simply does not want to work under musl, not even with libiconv. The ticket last discussing this ceased any activity in 2020. Signed-off-by: Ophestra <cat@gensokyo.uk>
224 lines
4.5 KiB
Go
224 lines
4.5 KiB
Go
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
|
|
Tar
|
|
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,
|
|
"tar": Tar,
|
|
"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
|
|
}
|