diff options
| author | Ophestra <cat@gensokyo.uk> | 2026-11-01 00:28:47 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2026-11-01 00:28:47 +0900 |
| commit | aaeefb7be7a6b59810be514d6c40159f40761f0d (patch) | |
| tree | da562f44eeb25adf837d0bfccaaf7bfc02d56cdf | |
| parent | 6b88f9afb9f8cd6312e0313e51e23d35dc23310b (diff) | |
internal/rosa: enable checks for cross-compilation
This uses QEMU to run checks when supported.
Signed-off-by: Ophestra <cat@gensokyo.uk>
| -rw-r--r-- | internal/rosa/cmake.go | 32 | ||||
| -rw-r--r-- | internal/rosa/llvm.go | 1 | ||||
| -rw-r--r-- | internal/rosa/make.go | 3 | ||||
| -rw-r--r-- | internal/rosa/package/fuse/package.az | 5 | ||||
| -rw-r--r-- | internal/rosa/package/glib/package.az | 5 | ||||
| -rw-r--r-- | internal/rosa/package/hakurei.az | 5 | ||||
| -rw-r--r-- | internal/rosa/package/kernel/package.az | 7 | ||||
| -rw-r--r-- | internal/rosa/package/libarchive/package.az | 7 | ||||
| -rw-r--r-- | internal/rosa/package/libdisplay-info.az | 8 | ||||
| -rw-r--r-- | internal/rosa/package/libdrm.az | 5 | ||||
| -rw-r--r-- | internal/rosa/package/libxml2.az | 8 | ||||
| -rw-r--r-- | internal/rosa/package/llvm/package.az | 3 | ||||
| -rw-r--r-- | internal/rosa/package/pcre2.az | 6 | ||||
| -rw-r--r-- | internal/rosa/package/spirv.az | 12 | ||||
| -rw-r--r-- | internal/rosa/package/wayland.az | 7 | ||||
| -rw-r--r-- | internal/rosa/package/zstd.az | 6 | ||||
| -rw-r--r-- | internal/rosa/state.go | 7 |
17 files changed, 103 insertions, 24 deletions
diff --git a/internal/rosa/cmake.go b/internal/rosa/cmake.go index 049688e5..b22c124f 100644 --- a/internal/rosa/cmake.go +++ b/internal/rosa/cmake.go @@ -20,6 +20,8 @@ type CMakeHelper struct { // Use the bootstrap minimal [MakeHelper] CMake. Early bool + // Omit CMAKE_CROSSCOMPILING_EMULATOR, because qemu is not yet available. + SkipEmulator bool // Value of CMAKE_BUILD_TYPE. The zero value is equivalent to "Release". BuildType string @@ -40,16 +42,22 @@ type CMakeHelper struct { var _ Helper = new(CMakeHelper) // tools returns the cmake handle alongside either ninja or make. -func (attr *CMakeHelper) tools(Toolchain) P { - h := _cmake - if attr != nil && attr.Early { - h = _cmakeEarly - } +func (attr *CMakeHelper) tools(t Toolchain) P { + tools := P{_cmake, _ninja, _qemu} + if attr != nil { + if attr.Early { + tools[0] = _cmakeEarly + } + + if attr.Make { + tools[1] = _make + } - if attr != nil && attr.Make { - return P{h, _make} + if !t.cross() || attr.SkipEmulator { + tools = tools[:2] + } } - return P{h, _ninja} + return tools } // inputs is a noop. @@ -85,7 +93,8 @@ func (attr *CMakeHelper) script(t Toolchain, name string) string { } script := attr.Script - if !attr.SkipTest && t.opts&OptSkipCheck == 0 { + if !attr.SkipTest && t.opts&OptSkipCheck == 0 && + !(t.cross() && attr.SkipEmulator) { script += "\n" + test } @@ -108,6 +117,11 @@ func (attr *CMakeHelper) script(t Toolchain, name string) string { -DCMAKE_CXX_FLAGS='--target=` + target + ` --sysroot=` + sysroot + `' \ -DCMAKE_ASM_COMPILER=` + Prefix + `/bin/clang \ -DCMAKE_ASM_FLAGS='--target=` + target + ` --sysroot=` + sysroot + `' \` + + if !attr.SkipEmulator { + cross += ` + -DCMAKE_CROSSCOMPILING_EMULATOR='qemu-` + t.linuxArch() + `;-L;` + sysroot + `' \` + } } return ` diff --git a/internal/rosa/llvm.go b/internal/rosa/llvm.go index dacb9098..b214fd83 100644 --- a/internal/rosa/llvm.go +++ b/internal/rosa/llvm.go @@ -293,6 +293,7 @@ cat << EOF > /work` + Prefix + `/bin/clang++.cfg EOF `, + SkipEmulator: true, // LLVM_LINK_LLVM_DYLIB causes llvm test suite to leak system // installation into test environment, and the tests end up testing the // system installation instead. Tests are disabled on stage0 and relies diff --git a/internal/rosa/make.go b/internal/rosa/make.go index 7a8bdec9..6f3d7526 100644 --- a/internal/rosa/make.go +++ b/internal/rosa/make.go @@ -222,7 +222,8 @@ make \ scriptMake += "\n" if !attr.SkipCheck && t.opts&OptSkipCheck == 0 && - (!attr.SkipCheckEarly || !t.stage.isStage0()) { + (!attr.SkipCheckEarly || !t.stage.isStage0()) && + !t.cross() { scriptMake += attr.ScriptCheckEarly + `make \ ` + jobsFlagE + ` \ ` + loadFlagE + ` \ diff --git a/internal/rosa/package/fuse/package.az b/internal/rosa/package/fuse/package.az index b73432a3..f7fce8a6 100644 --- a/internal/rosa/package/fuse/package.az +++ b/internal/rosa/package/fuse/package.az @@ -20,6 +20,11 @@ package fuse { "useroot": "false"; "initscriptdir": prefix+"/etc"; }; + test = arch { + default = unset; + // some tests bypass meson exe_wrapper + cross = false; + }; }; tools = [ bash ]; diff --git a/internal/rosa/package/glib/package.az b/internal/rosa/package/glib/package.az index 9c531283..4e46d93f 100644 --- a/internal/rosa/package/glib/package.az +++ b/internal/rosa/package/glib/package.az @@ -22,6 +22,11 @@ package glib { }; // fails with ipv6 disabled skipTests = [ "gio" ]; + test = arch { + default = unset; + // some tests bypass meson exe_wrapper + cross = false; + }; }; tools = [ diff --git a/internal/rosa/package/hakurei.az b/internal/rosa/package/hakurei.az index 14faef32..1a7e953f 100644 --- a/internal/rosa/package/hakurei.az +++ b/internal/rosa/package/hakurei.az @@ -53,11 +53,14 @@ GOARCH='`+arch+`' CGO_ENABLED=0 go build -trimpath -tags=rosa -o /work`+prefix+` -buildid= -X main.hakureiPath=`+prefix+`/bin/hakurei " ./cmd/hsu`; - check = ` + check = arch { + default = ` echo echo '##### Testing hakurei.' go test -ldflags='-buildid= -linkmode external -extldflags=-static' ./... echo`; + cross = unset; + }; install = ` mkdir -p /work`+prefix+`/bin/ (cd /work`+prefix+`/libexec/hakurei && mv \ diff --git a/internal/rosa/package/kernel/package.az b/internal/rosa/package/kernel/package.az index 10aeb63f..741d4c6e 100644 --- a/internal/rosa/package/kernel/package.az +++ b/internal/rosa/package/kernel/package.az @@ -91,12 +91,7 @@ package kernel { source = kernel-source; files = { - ".config": arch { - amd64 = "amd64.config"; - arm64 = "arm64.config"; - ppc64le = "ppc64le.config"; - riscv64 = "riscv64.config"; - }; + ".config": arch+".config"; "/sbin/installkernel": "installkernel"; // kernel is not aware of kmod moduledir diff --git a/internal/rosa/package/libarchive/package.az b/internal/rosa/package/libarchive/package.az index bd57a860..da21f4ff 100644 --- a/internal/rosa/package/libarchive/package.az +++ b/internal/rosa/package/libarchive/package.az @@ -15,7 +15,12 @@ package libarchive { writable = true; early = "\ninstall -Dv /usr/src/CTestCustom.cmake /cure/\n"; - exec = cmake {}; + exec = cmake { + test = arch { + default = unset; + cross = nil; + }; + }; inputs = [ zlib, diff --git a/internal/rosa/package/libdisplay-info.az b/internal/rosa/package/libdisplay-info.az index b953203b..99d4e419 100644 --- a/internal/rosa/package/libdisplay-info.az +++ b/internal/rosa/package/libdisplay-info.az @@ -11,7 +11,13 @@ package libdisplay-info { checksum = "CSa7niSNG6xpUiV5bhDIPp6PU239fzY3SShaneY0rhhuFYSxZFzKGTiE16-k6sSA"; }; - exec = meson {}; + exec = meson { + test = arch { + default = unset; + // some tests bypass meson exe_wrapper + cross = false; + }; + }; tools = [ diffutils, hwdata, diff --git a/internal/rosa/package/libdrm.az b/internal/rosa/package/libdrm.az index 6491da28..3ae9a8e5 100644 --- a/internal/rosa/package/libdrm.az +++ b/internal/rosa/package/libdrm.az @@ -15,6 +15,11 @@ package libdrm { setup = { "intel": "enabled"; }; + test = arch { + default = unset; + // some tests bypass meson exe_wrapper + cross = false; + }; }; tools = [ diff --git a/internal/rosa/package/libxml2.az b/internal/rosa/package/libxml2.az index a169c0e4..b0843081 100644 --- a/internal/rosa/package/libxml2.az +++ b/internal/rosa/package/libxml2.az @@ -14,7 +14,13 @@ package libxml2 { // can't create shell.out: Read-only file system writable = true; - exec = meson {}; + exec = meson { + test = arch { + default = unset; + // some tests bypass meson exe_wrapper + cross = false; + }; + }; tools = [ git, diff --git a/internal/rosa/package/llvm/package.az b/internal/rosa/package/llvm/package.az index 007b94c3..7a047b74 100644 --- a/internal/rosa/package/llvm/package.az +++ b/internal/rosa/package/llvm/package.az @@ -33,6 +33,7 @@ package early-builtins { "COMPILER_RT_DEFAULT_TARGET_ONLY": "ON"; }; + qemu = false; test = nil; }; @@ -85,6 +86,7 @@ message(NOTICE "${LLVM_VERSION_MAJOR}") "COMPILER_RT_BUILD_XRAY": "OFF"; "COMPILER_RT_BUILD_ORC": "OFF"; }; + qemu = false; test = nil; postInstall = ` mkdir -p "/work`+prefix+`/lib/clang/$LLVM_VERSION_MAJOR/lib/" @@ -139,6 +141,7 @@ package early-runtimes { "LLVM_ENABLE_ZSTD": "FORCE_ON"; "LLVM_ENABLE_LIBXML2": "OFF"; }; + qemu = false; test = nil; }; diff --git a/internal/rosa/package/pcre2.az b/internal/rosa/package/pcre2.az index e964ced0..74649dfd 100644 --- a/internal/rosa/package/pcre2.az +++ b/internal/rosa/package/pcre2.az @@ -18,6 +18,12 @@ package pcre2 { cache = { "PCRE2_SUPPORT_JIT": "ON"; }; + + test = arch { + default = unset; + // test suite bypasses ctest + cross = nil; + }; }; tools = [ diff --git a/internal/rosa/package/spirv.az b/internal/rosa/package/spirv.az index 33a4816a..d2d4ad99 100644 --- a/internal/rosa/package/spirv.az +++ b/internal/rosa/package/spirv.az @@ -37,6 +37,12 @@ package spirv-tools { cross = prefix+"/"+arch; }+prefix; }; + + test = arch { + default = unset; + // attempts to invoke python through qemu + cross = nil; + }; }; tools = [ python ]; @@ -156,6 +162,12 @@ package spirv-llvm-translator { "LLVM_EXTERNAL_LIT": prefix+"/bin/lit"; "LLVM_INCLUDE_TESTS": "ON"; }; + + test = arch { + default = unset; + // lit does not use emulator specified for CMake + cross = nil; + }; }; tools = [ diff --git a/internal/rosa/package/wayland.az b/internal/rosa/package/wayland.az index 25f0c680..a51f502b 100644 --- a/internal/rosa/package/wayland.az +++ b/internal/rosa/package/wayland.az @@ -23,6 +23,13 @@ echo 'int main(){}' > tests/sanity-test.c "documentation": "false"; "tests": "true"; }; + + test = arch { + default = unset; + // some tests bypass meson exe_wrapper, qemu sets off + // fd leak tests + cross = false; + }; }; tools = [ diff --git a/internal/rosa/package/zstd.az b/internal/rosa/package/zstd.az index 29e2c51f..47974385 100644 --- a/internal/rosa/package/zstd.az +++ b/internal/rosa/package/zstd.az @@ -18,10 +18,14 @@ package zstd { exec = cmake { append = [ "build", "cmake" ]; - test = ` + test = arch { + default = ` make -C /usr/src/zstd/tests datagen ZSTD_BIN=/cure/programs/zstd /usr/src/zstd/tests/playTests.sh `; + // does not use ctest + cross = nil; + }; }; tools = [ diff --git a/internal/rosa/state.go b/internal/rosa/state.go index aa03b8ba..dc1b3109 100644 --- a/internal/rosa/state.go +++ b/internal/rosa/state.go @@ -226,15 +226,13 @@ type S struct { // crosscompiling state for the native architecture. var ErrInvalidCross = errors.New("invalid cross-compilation state") -// NewCross returns a copy of s for cross-compilation. Testing is disabled in -// the copy. +// NewCross returns a copy of s for cross-compilation. func (s *S) NewCross(arch string) *S { if s.native != nil && arch == s.native.Arch() { panic(ErrInvalidCross) } p := s.Clone() - p.opts |= OptSkipCheck p.native, p.arch = s, arch return p } @@ -928,8 +926,10 @@ func (s *S) getFrame() azalea.Frame { ) (v any, set bool, err error) { var attr CMakeHelper var test azalea.AString + qemu := true if err = args.Apply(map[unique.Handle[azalea.Ident]]any{ k("early"): &attr.Early, + k("qemu"): &qemu, k("append"): &attr.Append, k("buildType"): &attr.BuildType, k("cache"): &attr.Cache, @@ -939,6 +939,7 @@ func (s *S) getFrame() azalea.Frame { }); err != nil { return } + attr.SkipEmulator = !qemu attr.Test = test.V attr.SkipTest = test.Nil |
