41 lines
1.4 KiB
JavaScript
41 lines
1.4 KiB
JavaScript
// example.js — GDS → CIF format conversion using the Magic WASM module.
|
|
//
|
|
// Usage:
|
|
// node examples/example.js [input.gds] [output.cif]
|
|
//
|
|
// Defaults:
|
|
// input: design.gds (in current working directory)
|
|
// output: design.cif (in current working directory)
|
|
|
|
import { readFileSync, writeFileSync } from 'node:fs';
|
|
import { fileURLToPath } from 'node:url';
|
|
import { dirname, resolve, basename } from 'node:path';
|
|
import createMagicModule from '../magic.js';
|
|
|
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
|
|
const wasmBinary = readFileSync(resolve(__dirname, '../magic.wasm'));
|
|
|
|
const inputGds = process.argv[2] ?? 'design.gds';
|
|
const outputCif = process.argv[3] ?? inputGds.replace(/\.gds$/i, '.cif');
|
|
const cellName = basename(inputGds, '.gds');
|
|
|
|
const module = await createMagicModule({
|
|
wasmBinary,
|
|
print: msg => console.log('[magic]', msg),
|
|
printErr: msg => console.error('[magic]', msg),
|
|
});
|
|
|
|
module.FS.mkdirTree('/work');
|
|
module.FS.writeFile(`/work/${cellName}.gds`, readFileSync(inputGds));
|
|
|
|
module._magic_wasm_init();
|
|
module.cwrap('magic_wasm_run_command', 'number', ['string'])(`gds read /work/${cellName}`);
|
|
module.cwrap('magic_wasm_run_command', 'number', ['string'])(`load ${cellName}`);
|
|
module.cwrap('magic_wasm_run_command', 'number', ['string'])(`cif write /work/${cellName}`);
|
|
|
|
const cifBytes = module.FS.readFile(`/work/${cellName}.cif`);
|
|
writeFileSync(outputCif, cifBytes);
|
|
|
|
console.log(`Converted ${inputGds} → ${outputCif}`);
|