commands: move compiler.extractCommand -> commands.ts

This commit is contained in:
2024-06-16 18:28:43 +08:00
parent bf628dc609
commit fb6a75cb27
2 changed files with 45 additions and 38 deletions

View File

@@ -21,11 +21,17 @@ export function systemdRun(unit: string, workingDirectory: string = process.cwd(
} }
function undefList<T, U>(opt: T | undefined, fn: (opt: T) => U) { function undefList<T, U>(opt: T | undefined, fn: (opt: T) => U) {
return opt ? fn(opt) : [] return opt === undefined ? [] : fn(opt)
} }
const optFlag = (flag: string, opt: string | undefined) => undefList(opt, opt => [flag, opt]) const optFlag = (flag: string, opt: string | undefined) => undefList(opt, opt => [flag, opt])
/**
* Generate a switch flag, like "--rebuild", "--nobuild"
*/
const optSwitch = (flag: string, opt: boolean | undefined) => undefList(opt, opt => opt ? [flag] : [])
export module SPECCommands { export module SPECCommands {
interface SPECOptions { interface SPECOptions {
@@ -103,4 +109,39 @@ export module CompilerCommands {
} }
/**
* CLI options used for llvm-extract executable.
*/
export interface ExtractOptions {
/**
* Functions to extract.
*/
func?: string[];
/**
* Basic block specifiers.
*/
bb?: string[];
output?: string;
/**
* Input file name. If unspecified, llvm-extract reads from stdin
*/
input?: string;
asm?: boolean;
}
export function extractCommand(options: ExtractOptions): string[] {
return [
...undefList(options.func, func => func.flatMap(name => ["--func", name])),
...undefList(options.bb, bb => bb.flatMap(name => ["--bb", name])),
...optFlag("-o", options.output),
...optSwitch("-S", options.asm),
...undefList(options.input, input => [input])
];
}
} }

View File

@@ -4,6 +4,7 @@ import path from "path"
// FIXME: these imports basically looks ugly. // FIXME: these imports basically looks ugly.
import { LLVM_EXTRACT, PREFIX, SYSROOT_PREFIX, FLANG } from "./environment"; import { LLVM_EXTRACT, PREFIX, SYSROOT_PREFIX, FLANG } from "./environment";
import { CompilerCommands } from "./commands";
/** /**
@@ -32,48 +33,13 @@ export function functionList(module: string) {
return result; return result;
} }
/**
* CLI options used for llvm-extract executable.
*/
export interface ExtractOptions {
/**
* Functions to extract.
*/
func?: string[]
/**
* Basic block specifiers.
*/
bb?: string[]
output?: string
/**
* Input file name. If unspecified, llvm-extract reads from stdin
*/
input?: string
asm?: boolean
}
export function extractCommand(options: ExtractOptions): string[] {
return [
...(options.func ?? []).flatMap(name => ["--func", name]),
...(options.bb ?? []).flatMap(name => ["--bb", name]),
...(options.output ? ["-o", options.output] : []),
...(options.asm ? ["-S"] : []),
...(options.input ? [options.input] : [])
];
}
/** /**
* Extract one function using llvm-extract * Extract one function using llvm-extract
*/ */
export async function extract(options: ExtractOptions) { export async function extract(options: CompilerCommands.ExtractOptions) {
let process = child_process.spawn( let process = child_process.spawn(
LLVM_EXTRACT, LLVM_EXTRACT,
extractCommand(options), CompilerCommands.extractCommand(options),
{ stdio: "inherit" } { stdio: "inherit" }
) )
const exitcode = await new Promise((resolve, reject) => { process.on('close', resolve) }) const exitcode = await new Promise((resolve, reject) => { process.on('close', resolve) })