aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-04-12 22:16:29 +0900
committerOphestra <cat@gensokyo.uk>2026-04-12 22:16:29 +0900
commit1084e31d95d36cfdefbfa99789e86763636f5630 (patch)
tree995b98f8537c5bd3690559f338d1c52042ea6978
parent27a1b8fe0a48dbd9b409ed2d33c5fbc233cc56d4 (diff)
internal/rosa/glslang: spirv-headers artifact
Required by spirv-tools. Signed-off-by: Ophestra <cat@gensokyo.uk>
-rw-r--r--internal/rosa/all.go1
-rw-r--r--internal/rosa/glslang.go55
2 files changed, 56 insertions, 0 deletions
diff --git a/internal/rosa/all.go b/internal/rosa/all.go
index ecb764e2..747ddaa6 100644
--- a/internal/rosa/all.go
+++ b/internal/rosa/all.go
@@ -136,6 +136,7 @@ const (
Rsync
Sed
Setuptools
+ SPIRVHeaders
SquashfsTools
Strace
TamaGo
diff --git a/internal/rosa/glslang.go b/internal/rosa/glslang.go
new file mode 100644
index 00000000..c5aa2f49
--- /dev/null
+++ b/internal/rosa/glslang.go
@@ -0,0 +1,55 @@
+package rosa
+
+import (
+ "slices"
+ "strings"
+
+ "hakurei.app/internal/pkg"
+)
+
+func (t Toolchain) newSPIRVHeaders() (pkg.Artifact, string) {
+ const (
+ version = "1.4.341.0"
+ checksum = "0PL43-19Iaw4k7_D8J8BvoJ-iLgCVSYZ2ThgDPGfAJwIJFtre7l0cnQtLjcY-JvD"
+ )
+ return t.NewPackage("spirv-headers", version, pkg.NewHTTPGetTar(
+ nil, "https://github.com/KhronosGroup/SPIRV-Headers/archive/"+
+ "refs/tags/vulkan-sdk-"+version+".tar.gz",
+ mustDecode(checksum),
+ pkg.TarGzip,
+ ), nil, &CMakeHelper{
+ Cache: []KV{
+ {"CMAKE_BUILD_TYPE", "Release"},
+ },
+ }), version
+}
+func init() {
+ artifactsM[SPIRVHeaders] = Metadata{
+ f: Toolchain.newSPIRVHeaders,
+
+ Name: "spirv-headers",
+ Description: "machine-readable files for the SPIR-V Registry",
+ Website: "https://github.com/KhronosGroup/SPIRV-Headers",
+
+ ID: 230542,
+
+ // upstream changed version scheme, anitya incapable of filtering them
+ latest: func(v *Versions) string {
+ for _, s := range v.Stable {
+ fields := strings.SplitN(s, ".", 4)
+ if len(fields) != 4 {
+ continue
+ }
+ if slices.ContainsFunc(fields, func(f string) bool {
+ return slices.ContainsFunc([]byte(f), func(d byte) bool {
+ return d < '0' || d > '9'
+ })
+ }) {
+ continue
+ }
+ return s
+ }
+ return v.Latest
+ },
+ }
+}