diff --git a/src/common/toolmeta.ts b/src/common/toolmeta.ts index e3de6d07..b796c22a 100644 --- a/src/common/toolmeta.ts +++ b/src/common/toolmeta.ts @@ -284,7 +284,7 @@ export const TOOL_META: { [id: string]: ToolMeta } = { ca65: { id: 'ca65', name: 'ca65', kind: 'assembler', arch: '6502', - extensions: ['.s', '.ca65'], + extensions: ['.s', '.ca65', '.inc'], includeDirs: ['/include', '/asminc'], editorStyle: '6502', helpURL: 'https://cc65.github.io/doc/ca65.html', @@ -698,8 +698,16 @@ export function getPreloadFSName(tool: string, platform?: string): string | unde if (!meta) return undefined; if (meta.platforms) { if (platform) { + // Try the exact id, then the root base id so suffixed platform ids + // (e.g. 'atari8-800', 'atari8-5200.xlmame') resolve to the shared + // filesystem registered under the root ('atari8' -> '65-atari8'). let p = meta.platforms[platform]; if (p && p.preloadFS) return p.preloadFS; + let base = getRootBasePlatform(platform); + if (base && base !== platform) { + let b = meta.platforms[base]; + if (b && b.preloadFS) return b.preloadFS; + } } let d = meta.platforms['default']; if (d && d.preloadFS) return d.preloadFS; diff --git a/src/worker/workerlib.ts b/src/worker/workerlib.ts index 3e27eb89..11d8203d 100644 --- a/src/worker/workerlib.ts +++ b/src/worker/workerlib.ts @@ -6,7 +6,6 @@ import * as fs from 'fs'; import * as path from 'path'; import type { WorkerResult, WorkerMessage } from "../common/workertypes"; -import { getBasePlatform, getRootBasePlatform } from "../common/util"; import { getPreloadFSName } from "../common/toolmeta"; import { store, builder } from "./builder"; import { emglobal, fsMeta, loadFilesystem, listSharedFiles, readSharedFile, ensureFilesystem, readWasiSharedFile, listWasiSharedFiles, ensureWasiFilesystem } from "./wasmutils"; @@ -136,8 +135,7 @@ export function setupNodeEnvironment() { export async function handleMessage(data: WorkerMessage): Promise { // preload file system if (data.preload) { - var fsName = getPreloadFSName(data.preload, data.platform && getBasePlatform(data.platform)) - || getPreloadFSName(data.preload, data.platform && getRootBasePlatform(data.platform)); + var fsName = getPreloadFSName(data.preload, data.platform); if (fsName && !fsMeta[fsName]) loadFilesystem(fsName); return; diff --git a/src/worker/workermain.ts b/src/worker/workermain.ts index f28c751f..8eea144f 100644 --- a/src/worker/workermain.ts +++ b/src/worker/workermain.ts @@ -1,6 +1,5 @@ import type { WorkerResult, WorkerMessage, WorkerError, SourceLine } from "../common/workertypes"; -import { getBasePlatform, getRootBasePlatform } from "../common/util"; import { getPreloadFSName } from "../common/toolmeta"; import { store, builder, errorResult, getWorkFileAsString } from "./builder"; import { emglobal, fsMeta, loadFilesystem, listSharedFiles, readSharedFile, ensureFilesystem, readWasiSharedFile, listWasiSharedFiles, ensureWasiFilesystem } from "./wasmutils"; @@ -37,8 +36,7 @@ export function setupRequireFunction() { async function handleMessage(data: WorkerMessage): Promise { // preload file system if (data.preload) { - var fs = getPreloadFSName(data.preload, data.platform && getBasePlatform(data.platform)) - || getPreloadFSName(data.preload, data.platform && getRootBasePlatform(data.platform)); + var fs = getPreloadFSName(data.preload, data.platform); if (fs && !fsMeta[fs]) loadFilesystem(fs); return; diff --git a/test/unit/testtoolmeta.ts b/test/unit/testtoolmeta.ts index ffb6cf98..0d1c4ce8 100644 --- a/test/unit/testtoolmeta.ts +++ b/test/unit/testtoolmeta.ts @@ -53,6 +53,15 @@ describe('Tool metadata registry', function () { assert.strictEqual(getPreloadFSName('dasm'), undefined); }); + it('getPreloadFSName resolves suffixed platform ids to their root base', function () { + // atari8 runs as 'atari8-800' / 'atari8-5200' / *.xlmame variants + assert.strictEqual(getPreloadFSName('cc65', 'atari8'), '65-atari8'); + assert.strictEqual(getPreloadFSName('cc65', 'atari8-800'), '65-atari8'); + assert.strictEqual(getPreloadFSName('cc65', 'atari8-800.xlmame'), '65-atari8'); + assert.strictEqual(getPreloadFSName('cc65', 'atari8-5200'), '65-atari8'); + assert.strictEqual(getSharedFileSystemName('cc65', 'atari8-800'), '65-atari8'); + }); + it('getSkeletonName defaults to the tool id', function () { assert.strictEqual(getSkeletonName('dasm'), 'dasm'); assert.strictEqual(getSkeletonName('remote:llvm-mos'), 'llvm-mos');