feat(judge): add language-specific compilation commands for C and C++

This commit is contained in:
cfngc4594 2025-04-14 10:28:39 +08:00
parent 2a4d741a76
commit 9b82088110

View File

@ -188,7 +188,7 @@ export async function judge(
await container.putArchive(tarStream, { path: workingDir }); await container.putArchive(tarStream, { path: workingDir });
// Compile the code // Compile the code
const compileResult = await compile(container, file, fileName, compileOutputLimit, submission.id); const compileResult = await compile(container, file, fileName, compileOutputLimit, submission.id, language);
if (compileResult.status === Status.CE) { if (compileResult.status === Status.CE) {
return compileResult; return compileResult;
} }
@ -239,9 +239,27 @@ async function compile(
fileName: string, fileName: string,
compileOutputLimit: number = 1 * 1024 * 1024, compileOutputLimit: number = 1 * 1024 * 1024,
submissionId: string, submissionId: string,
language: EditorLanguage,
): Promise<Submission> { ): Promise<Submission> {
const compileCmd =
language === "c"
? ["gcc", "-O2", file, "-o", fileName]
: language === "cpp"
? ["g++", "-O2", file, "-o", fileName]
: null;
if (!compileCmd) {
return prisma.submission.update({
where: { id: submissionId },
data: {
status: Status.SE,
message: "Unsupported language",
},
});
}
const compileExec = await container.exec({ const compileExec = await container.exec({
Cmd: ["gcc", "-O2", file, "-o", fileName], Cmd: compileCmd,
AttachStdout: true, AttachStdout: true,
AttachStderr: true, AttachStderr: true,
}); });