import assert from 'node:assert/strict'; import {readFileSync} from 'node:fs'; import {join} from 'node:path'; import {hashAt} from './boot-contract-report.mjs'; import {filesIn} from './entry-extension.mjs'; const helpers=['k1060-runqueue-context-services.rs','k1060-runqueue-backend.rs','k1060-runqueue-retirement.rs']; const frozenContext=['os-context-switch/src/context.rs','scripts/os-acceptance/k1040-context-handoff.rs','scripts/os-acceptance/k1040-context-completion.rs','scripts/os-acceptance/k1040-context-retirement.rs','scripts/os-acceptance/k1060-context-return-observation.rs']; const frozenQueue=['os-runqueue/src/runqueue.rs','scripts/os-acceptance/k1060-runqueue-handoff.rs','scripts/os-acceptance/k1060-runqueue-return.rs','scripts/os-acceptance/k1060-runqueue-observation.rs','scripts/os-acceptance/k1060-runqueue-retirement.rs']; export function runqueueGuestServicesSources(root,overrides=new Map()){const read=p=>overrides.get(p)??readFileSync(join(root,p),'utf8');const context=[...frozenContext,'scripts/os-acceptance/k1060-runqueue-context-services.rs'].map(read).join('\n').replaceAll('crate::runtime::runqueue','crate::runqueue');const runqueue=frozenQueue.map(read).join('\n').replaceAll('turkos_os_context_switch::context','crate::context');let backend=read('scripts/os-acceptance/k1060-runqueue-backend.rs');const importLine='use turkos_kernel::runtime::{runqueue as os_k1060_queue, runqueue_context as os_k1060_context};';assert.equal(backend.split(importLine).length,2);backend=backend.replace(importLine,'use crate::{context as os_k1060_context,runqueue as os_k1060_queue};\nuse turkos_os_threads::threads as os_k1060_thread;\nfn park()->!{loop{core::hint::spin_loop();}}');return new Map([['src/context.rs',context],['src/runqueue.rs',runqueue],['src/backend.rs',backend],['src/lib.rs','#![no_std]\npub mod context;\npub mod runqueue;\n#[allow(dead_code)]pub mod backend;\n'],['Cargo.toml','[package]\nname="turkos-os-runqueue-guest-services"\nversion="0.1.0"\nedition="2024"\n[lib]\ntest=false\n[dependencies]\nturkos-os-threads={path="../os-threads"}\nturkos-os-exceptions={path="../os-exceptions"}\n']]);} export const runqueueGuestServicesInputs=root=>[...new Set([...helpers.map(p=>'scripts/os-acceptance/'+p),'scripts/os-acceptance/runqueue-guest-services-sources.mjs','scripts/os-acceptance/runqueue-guest-services-smoke.mjs',...frozenContext,...frozenQueue,...filesIn(root,'os-threads'),...filesIn(root,'os-exceptions'),'.cargo/config.toml'])].sort().map(path=>({path,sha256:hashAt(root,path)}));