aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/rosa/all.go
blob: 3c087e5dab9fcd48dfbecb5f6745206330ce4008 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
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
	Automake
	Bash
	Binutils
	Bzip2
	CMake
	Coreutils
	Curl
	Diffutils
	Findutils
	Fuse
	Gawk
	GMP
	Gettext
	Git
	Go
	Gperf
	Grep
	Gzip
	Hakurei
	HakureiDist
	IniConfig
	KernelHeaders
	Kmod
	LibXau
	Libexpat
	Libpsl
	Libffi
	Libgd
	Libtool
	Libseccomp
	Libucontext
	Libxml2
	M4
	MPC
	MPFR
	Make
	Meson
	Mksh
	NSS
	NSSCACert
	Ninja
	OpenSSL
	PCRE2
	Packaging
	Patch
	Perl
	PkgConfig
	Pluggy
	PyTest
	Pygments
	Python
	Rsync
	Sed
	Setuptools
	SquashfsTools
	Toybox
	toyboxEarly
	Unzip
	utilMacros
	Wayland
	WaylandProtocols
	XCB
	XCBProto
	Xproto
	XZ
	Zlib
	Zstd

	buildcatrust

	// 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,
		"attr":              Attr,
		"autoconf":          Autoconf,
		"automake":          Automake,
		"bash":              Bash,
		"binutils":          Binutils,
		"bzip2":             Bzip2,
		"cmake":             CMake,
		"coreutils":         Coreutils,
		"curl":              Curl,
		"diffutils":         Diffutils,
		"findutils":         Findutils,
		"fuse":              Fuse,
		"gawk":              Gawk,
		"gmp":               GMP,
		"gettext":           Gettext,
		"git":               Git,
		"go":                Go,
		"gperf":             Gperf,
		"grep":              Grep,
		"gzip":              Gzip,
		"hakurei":           Hakurei,
		"hakurei-dist":      HakureiDist,
		"iniconfig":         IniConfig,
		"kernel-headers":    KernelHeaders,
		"kmod":              Kmod,
		"libXau":            LibXau,
		"libexpat":          Libexpat,
		"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,
		"nss":               NSS,
		"nss-cacert":        NSSCACert,
		"ninja":             Ninja,
		"openssl":           OpenSSL,
		"pcre2":             PCRE2,
		"packaging":         Packaging,
		"patch":             Patch,
		"perl":              Perl,
		"pkg-config":        PkgConfig,
		"pluggy":            Pluggy,
		"pytest":            PyTest,
		"pygments":          Pygments,
		"python":            Python,
		"rsync":             Rsync,
		"sed":               Sed,
		"setuptools":        Setuptools,
		"squashfs-tools":    SquashfsTools,
		"toybox":            Toybox,
		"unzip":             Unzip,
		"wayland":           Wayland,
		"wayland-protocols": WaylandProtocols,
		"xcb":               XCB,
		"xcb-proto":         XCBProto,
		"xproto":            Xproto,
		"xz":                XZ,
		"zlib":              Zlib,
		"zstd":              Zstd,
	}[name]
	return
}