aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-05-20 00:01:03 +0900
committerOphestra <cat@gensokyo.uk>2026-05-20 00:01:03 +0900
commita7f5a5802d48d26aa2bddb9d98be8e5efdef9db0 (patch)
treebce5078cb72653023a9656fc479e4625f2c00fac /internal
parentbb230378e080bdfdb4e323ec94a44064d67b3386 (diff)
internal/rosa/package: migrate spirv-llvm-translator
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal')
-rw-r--r--internal/rosa/glslang.go121
-rw-r--r--internal/rosa/package/spirv.az47
-rw-r--r--internal/rosa/package/spirv/package.az139
-rw-r--r--internal/rosa/package/spirv/remove-early-prefix.patch21
-rw-r--r--internal/rosa/state.go18
5 files changed, 178 insertions, 168 deletions
diff --git a/internal/rosa/glslang.go b/internal/rosa/glslang.go
deleted file mode 100644
index e9ca6aa3..00000000
--- a/internal/rosa/glslang.go
+++ /dev/null
@@ -1,121 +0,0 @@
-package rosa
-
-import "hakurei.app/internal/pkg"
-
-func (t Toolchain) newSPIRVLLVMTranslator() (pkg.Artifact, string) {
- const (
- version = "22.1.2"
- checksum = "JZAaV5ewYcm-35YA_U2BM2IcsQouZtX1BLZR0zh2vSlfEXMsT5OCtY4Gh5RJkcGy"
- )
- skipChecks := []string{
- // error: line 13: OpTypeCooperativeMatrixKHR Scope is limited to Workgroup and Subgroup
- "cooperative_matrix_constant_null.spvasm",
- }
-
- switch t.arch {
- case "arm64":
- skipChecks = append(skipChecks,
- // LLVM ERROR: unsupported calling convention
- "DebugInfo/COFF/no-cus.ll",
- "DebugInfo/Generic/2009-11-05-DeadGlobalVariable.ll",
- "DebugInfo/Generic/2009-11-10-CurrentFn.ll",
- "DebugInfo/Generic/2010-01-05-DbgScope.ll",
- "DebugInfo/Generic/2010-03-12-llc-crash.ll",
- "DebugInfo/Generic/2010-03-24-MemberFn.ll",
- "DebugInfo/Generic/2010-04-19-FramePtr.ll",
- "DebugInfo/Generic/2010-06-29-InlinedFnLocalVar.ll",
- "DebugInfo/Generic/2010-10-01-crash.ll",
- "DebugInfo/Generic/PR20038.ll",
- "DebugInfo/Generic/constant-pointers.ll",
- "DebugInfo/Generic/dead-argument-order.ll",
- "DebugInfo/Generic/debug-info-eis-option.ll",
- "DebugInfo/Generic/def-line.ll",
- "DebugInfo/Generic/discriminator.ll",
- "DebugInfo/Generic/dwarf-public-names.ll",
- "DebugInfo/Generic/enum.ll",
- "DebugInfo/Generic/func-using-decl.ll",
- "DebugInfo/Generic/global.ll",
- "DebugInfo/Generic/imported-name-inlined.ll",
- "DebugInfo/Generic/incorrect-variable-debugloc1.ll",
- "DebugInfo/Generic/inline-scopes.ll",
- "DebugInfo/Generic/inlined-arguments.ll",
- "DebugInfo/Generic/inlined-vars.ll",
- "DebugInfo/Generic/linear-dbg-value.ll",
- "DebugInfo/Generic/linkage-name-abstract.ll",
- "DebugInfo/Generic/member-order.ll",
- "DebugInfo/Generic/missing-abstract-variable.ll",
- "DebugInfo/Generic/multiline.ll",
- "DebugInfo/Generic/namespace_function_definition.ll",
- "DebugInfo/Generic/namespace_inline_function_definition.ll",
- "DebugInfo/Generic/noscopes.ll",
- "DebugInfo/Generic/ptrsize.ll",
- "DebugInfo/Generic/restrict.ll",
- "DebugInfo/Generic/two-cus-from-same-file.ll",
- "DebugInfo/Generic/version.ll",
- "DebugInfo/LocalAddressSpace.ll",
- "DebugInfo/UnknownBaseType.ll",
- "DebugInfo/expr-opcode.ll",
- )
- }
-
- return t.NewPackage("spirv-llvm-translator", version, newFromGitHub(
- "KhronosGroup/SPIRV-LLVM-Translator",
- "v"+version, checksum,
- ), &PackageAttr{
- Patches: []KV{
- {"remove-early-prefix", `diff --git a/CMakeLists.txt b/CMakeLists.txt
-index c000a77e..f18f3fde 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -164,7 +164,7 @@ install(
- ${LLVM_SPIRV_INCLUDE_DIRS}/LLVMSPIRVOpts.h
- ${LLVM_SPIRV_INCLUDE_DIRS}/LLVMSPIRVExtensions.inc
- DESTINATION
-- ${CMAKE_INSTALL_PREFIX}/include/LLVMSPIRVLib
-+ include/LLVMSPIRVLib
- )
-
- configure_file(LLVMSPIRVLib.pc.in ${CMAKE_BINARY_DIR}/LLVMSPIRVLib.pc @ONLY)
-@@ -172,5 +172,5 @@ install(
- FILES
- ${CMAKE_BINARY_DIR}/LLVMSPIRVLib.pc
- DESTINATION
-- ${CMAKE_INSTALL_PREFIX}/lib${LLVM_LIBDIR_SUFFIX}/pkgconfig
-+ lib${LLVM_LIBDIR_SUFFIX}/pkgconfig
- )
-;`},
- },
-
- // litArgs emits shell syntax
- ScriptEarly: `
-export LIT_OPTS=` + litArgs(true, skipChecks...) + `
-`,
- }, &CMakeHelper{
- Cache: []KV{
- {"CMAKE_SKIP_BUILD_RPATH", "ON"},
- {"BUILD_SHARED_LIBS", "ON"},
- {"LLVM_SPIRV_ENABLE_LIBSPIRV_DIS", "ON"},
- {"LLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR", "/system"},
- {"LLVM_EXTERNAL_LIT", "/system/bin/lit"},
- {"LLVM_INCLUDE_TESTS", "ON"},
- },
- },
- Bash,
- LIT,
-
- SPIRVTools,
- ), version
-}
-func init() {
- native.mustRegister(Toolchain.newSPIRVLLVMTranslator, &Metadata{
- Name: "spirv-llvm-translator",
- Description: "bi-directional translation between SPIR-V and LLVM IR",
- Website: "https://github.com/KhronosGroup/SPIRV-LLVM-Translator",
-
- Dependencies: P{
- SPIRVTools,
- },
-
- ID: 227273,
- })
-}
diff --git a/internal/rosa/package/spirv.az b/internal/rosa/package/spirv.az
deleted file mode 100644
index 45ee1dc6..00000000
--- a/internal/rosa/package/spirv.az
+++ /dev/null
@@ -1,47 +0,0 @@
-package spirv-headers {
- description = "machine-readable files for the SPIR-V Registry";
- website = "https://github.com/KhronosGroup/SPIRV-Headers";
- anitya = 230542;
- // upstream changed version scheme, anitya incapable of filtering them
- latest = anityaFilterSPIRV;
-
- version* = "1.4.341.0";
- source = remoteGitHub {
- suffix = "KhronosGroup/SPIRV-Headers";
- tag = "vulkan-sdk-"+version;
- checksum = "0PL43-19Iaw4k7_D8J8BvoJ-iLgCVSYZ2ThgDPGfAJwIJFtre7l0cnQtLjcY-JvD";
- };
-
- exec = cmake {
- // upstream has no tests
- skipTest = true;
- };
-}
-
-package spirv-tools {
- description = "an API and commands for processing SPIR-V modules";
- website = "https://github.com/KhronosGroup/SPIRV-Tools";
- anitya = 14894;
- latest = anityaFallback;
-
- version* = "2026.1";
- source = remoteGitHub {
- suffix = "KhronosGroup/SPIRV-Tools";
- tag = "v"+version;
- checksum = "ZSQPQx8NltCDzQLk4qlaVxyWRWeI_JtsjEpeFt3kezTanl9DTHfLixSUCezMFBjv";
- };
-
- exec = cmake {
- cache = {
- "SPIRV-Headers_SOURCE_DIR": "/system";
- };
- };
-
- inputs = [
- python,
-
- spirv-headers,
- ];
-
- runtime = [ spirv-headers ];
-}
diff --git a/internal/rosa/package/spirv/package.az b/internal/rosa/package/spirv/package.az
new file mode 100644
index 00000000..0b4789c6
--- /dev/null
+++ b/internal/rosa/package/spirv/package.az
@@ -0,0 +1,139 @@
+package spirv-headers {
+ description = "machine-readable files for the SPIR-V Registry";
+ website = "https://github.com/KhronosGroup/SPIRV-Headers";
+ anitya = 230542;
+ // upstream changed version scheme, anitya incapable of filtering them
+ latest = anityaFilterSPIRV;
+
+ version* = "1.4.341.0";
+ source = remoteGitHub {
+ suffix = "KhronosGroup/SPIRV-Headers";
+ tag = "vulkan-sdk-"+version;
+ checksum = "0PL43-19Iaw4k7_D8J8BvoJ-iLgCVSYZ2ThgDPGfAJwIJFtre7l0cnQtLjcY-JvD";
+ };
+
+ exec = cmake {
+ // upstream has no tests
+ skipTest = true;
+ };
+}
+
+package spirv-tools {
+ description = "an API and commands for processing SPIR-V modules";
+ website = "https://github.com/KhronosGroup/SPIRV-Tools";
+ anitya = 14894;
+ latest = anityaFallback;
+
+ version* = "2026.1";
+ source = remoteGitHub {
+ suffix = "KhronosGroup/SPIRV-Tools";
+ tag = "v"+version;
+ checksum = "ZSQPQx8NltCDzQLk4qlaVxyWRWeI_JtsjEpeFt3kezTanl9DTHfLixSUCezMFBjv";
+ };
+
+ exec = cmake {
+ cache = {
+ "SPIRV-Headers_SOURCE_DIR": "/system";
+ };
+ };
+
+ inputs = [
+ python,
+
+ spirv-headers,
+ ];
+
+ runtime = [ spirv-headers ];
+}
+
+package spirv-llvm-translator {
+ description = "bi-directional translation between SPIR-V and LLVM IR";
+ website = "https://github.com/KhronosGroup/SPIRV-LLVM-Translator";
+ anitya = 227273;
+
+ version* = "22.1.2";
+ source = remoteGitHub {
+ suffix = "KhronosGroup/SPIRV-LLVM-Translator";
+ tag = "v"+version;
+ checksum = "JZAaV5ewYcm-35YA_U2BM2IcsQouZtX1BLZR0zh2vSlfEXMsT5OCtY4Gh5RJkcGy";
+ };
+ patches = [ "remove-early-prefix.patch" ];
+
+ // litArgs emits shell syntax
+ early = "\nexport LIT_OPTS=" + litArgs {
+ verbose = true;
+
+ skipChecks = arch {
+ default = [
+ // error: line 13: OpTypeCooperativeMatrixKHR Scope is limited to Workgroup and Subgroup
+ "cooperative_matrix_constant_null.spvasm",
+ ];
+
+ arm64 = [
+ // error: line 13: OpTypeCooperativeMatrixKHR Scope is limited to Workgroup and Subgroup
+ "cooperative_matrix_constant_null.spvasm",
+
+ // LLVM ERROR: unsupported calling convention
+ "DebugInfo/COFF/no-cus.ll",
+ "DebugInfo/Generic/2009-11-05-DeadGlobalVariable.ll",
+ "DebugInfo/Generic/2009-11-10-CurrentFn.ll",
+ "DebugInfo/Generic/2010-01-05-DbgScope.ll",
+ "DebugInfo/Generic/2010-03-12-llc-crash.ll",
+ "DebugInfo/Generic/2010-03-24-MemberFn.ll",
+ "DebugInfo/Generic/2010-04-19-FramePtr.ll",
+ "DebugInfo/Generic/2010-06-29-InlinedFnLocalVar.ll",
+ "DebugInfo/Generic/2010-10-01-crash.ll",
+ "DebugInfo/Generic/PR20038.ll",
+ "DebugInfo/Generic/constant-pointers.ll",
+ "DebugInfo/Generic/dead-argument-order.ll",
+ "DebugInfo/Generic/debug-info-eis-option.ll",
+ "DebugInfo/Generic/def-line.ll",
+ "DebugInfo/Generic/discriminator.ll",
+ "DebugInfo/Generic/dwarf-public-names.ll",
+ "DebugInfo/Generic/enum.ll",
+ "DebugInfo/Generic/func-using-decl.ll",
+ "DebugInfo/Generic/global.ll",
+ "DebugInfo/Generic/imported-name-inlined.ll",
+ "DebugInfo/Generic/incorrect-variable-debugloc1.ll",
+ "DebugInfo/Generic/inline-scopes.ll",
+ "DebugInfo/Generic/inlined-arguments.ll",
+ "DebugInfo/Generic/inlined-vars.ll",
+ "DebugInfo/Generic/linear-dbg-value.ll",
+ "DebugInfo/Generic/linkage-name-abstract.ll",
+ "DebugInfo/Generic/member-order.ll",
+ "DebugInfo/Generic/missing-abstract-variable.ll",
+ "DebugInfo/Generic/multiline.ll",
+ "DebugInfo/Generic/namespace_function_definition.ll",
+ "DebugInfo/Generic/namespace_inline_function_definition.ll",
+ "DebugInfo/Generic/noscopes.ll",
+ "DebugInfo/Generic/ptrsize.ll",
+ "DebugInfo/Generic/restrict.ll",
+ "DebugInfo/Generic/two-cus-from-same-file.ll",
+ "DebugInfo/Generic/version.ll",
+ "DebugInfo/LocalAddressSpace.ll",
+ "DebugInfo/UnknownBaseType.ll",
+ "DebugInfo/expr-opcode.ll",
+ ];
+ };
+ } + "\n";
+
+ exec = cmake {
+ cache = {
+ "CMAKE_SKIP_BUILD_RPATH": "ON";
+ "BUILD_SHARED_LIBS": "ON";
+ "LLVM_SPIRV_ENABLE_LIBSPIRV_DIS": "ON";
+ "LLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR": "/system";
+ "LLVM_EXTERNAL_LIT": "/system/bin/lit";
+ "LLVM_INCLUDE_TESTS": "ON";
+ };
+ };
+
+ inputs = [
+ bash,
+ lit,
+
+ spirv-tools,
+ ];
+
+ runtime = [ spirv-tools ];
+}
diff --git a/internal/rosa/package/spirv/remove-early-prefix.patch b/internal/rosa/package/spirv/remove-early-prefix.patch
new file mode 100644
index 00000000..f184ebc7
--- /dev/null
+++ b/internal/rosa/package/spirv/remove-early-prefix.patch
@@ -0,0 +1,21 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index c000a77e..f18f3fde 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -164,7 +164,7 @@ install(
+ ${LLVM_SPIRV_INCLUDE_DIRS}/LLVMSPIRVOpts.h
+ ${LLVM_SPIRV_INCLUDE_DIRS}/LLVMSPIRVExtensions.inc
+ DESTINATION
+- ${CMAKE_INSTALL_PREFIX}/include/LLVMSPIRVLib
++ include/LLVMSPIRVLib
+ )
+
+ configure_file(LLVMSPIRVLib.pc.in ${CMAKE_BINARY_DIR}/LLVMSPIRVLib.pc @ONLY)
+@@ -172,5 +172,5 @@ install(
+ FILES
+ ${CMAKE_BINARY_DIR}/LLVMSPIRVLib.pc
+ DESTINATION
+- ${CMAKE_INSTALL_PREFIX}/lib${LLVM_LIBDIR_SUFFIX}/pkgconfig
++ lib${LLVM_LIBDIR_SUFFIX}/pkgconfig
+ )
+; \ No newline at end of file
diff --git a/internal/rosa/state.go b/internal/rosa/state.go
index d0e2c5a3..3934fe38 100644
--- a/internal/rosa/state.go
+++ b/internal/rosa/state.go
@@ -516,6 +516,24 @@ func (s *S) getFrame() azalea.Frame {
return
}},
+ // formatting helpers
+
+ k("litArgs"): {F: func(
+ args azalea.FArgs,
+ ) (v any, set bool, err error) {
+ var verbose bool
+ var skipChecks []string
+ if err = args.Apply(map[unique.Handle[azalea.Ident]]any{
+ k("verbose"): &verbose,
+ k("skipChecks"): &skipChecks,
+ }); err != nil {
+ return
+ }
+ v = litArgs(verbose, skipChecks...)
+ set = true
+ return
+ }},
+
// intenral/pkg built-ins
k("remoteTar"): {F: func(