| import * as fs from 'fs'; |
| import * as path from 'path'; |
| import * as process from 'process'; |
| |
| import { crawl } from './crawl.js'; |
| |
| function usage(rc: number): void { |
| console.error(`Usage: tools/gen_listings [options] [OUT_DIR] [SUITE_DIRS...] |
| |
| For each suite in SUITE_DIRS, generate listings and write each listing.js |
| into OUT_DIR/{suite}/listing.js. Example: |
| tools/gen_listings gen/ src/unittests/ src/webgpu/ |
| |
| Options: |
| --help Print this message and exit. |
| `); |
| process.exit(rc); |
| } |
| |
| const argv = process.argv; |
| if (argv.indexOf('--help') !== -1) { |
| usage(0); |
| } |
| |
| { |
| // Ignore old argument that is now the default |
| const i = argv.indexOf('--no-validate'); |
| if (i !== -1) { |
| argv.splice(i, 1); |
| } |
| } |
| |
| if (argv.length < 4) { |
| usage(0); |
| } |
| |
| const myself = 'src/common/tools/gen_listings.ts'; |
| |
| const outDir = argv[2]; |
| |
| for (const suiteDir of argv.slice(3)) { |
| // Run concurrently for each suite (might be a tiny bit more efficient) |
| void crawl(suiteDir).then(listing => { |
| const suite = path.basename(suiteDir); |
| const outFile = path.normalize(path.join(outDir, `${suite}/listing.js`)); |
| fs.mkdirSync(path.join(outDir, suite), { recursive: true }); |
| fs.writeFileSync( |
| outFile, |
| `\ |
| // AUTO-GENERATED - DO NOT EDIT. See ${myself}. |
| |
| export const listing = ${JSON.stringify(listing, undefined, 2)}; |
| ` |
| ); |
| }); |
| } |