47 lines
1.6 KiB
C
47 lines
1.6 KiB
C
|
|
#include "Task.h"
|
||
|
|
#pragma once
|
||
|
|
class CompilationTask: public Task {
|
||
|
|
String test_id;
|
||
|
|
String makefile_text;
|
||
|
|
public:
|
||
|
|
void setTestId(String * test_id_in){
|
||
|
|
test_id = String(test_id_in->getCharArray());
|
||
|
|
}
|
||
|
|
void setMakefileText(String * makefile_text_in){
|
||
|
|
makefile_text = String(makefile_text_in->getCharArray(), '|');
|
||
|
|
}
|
||
|
|
virtual void print(){
|
||
|
|
printf("id=%ld; maxtime=%d; test_id=%s\n", id, maxtime,
|
||
|
|
test_id.getCharArray());
|
||
|
|
printf("makefile_text=%s\n", makefile_text.getCharArray());
|
||
|
|
}
|
||
|
|
CompilationTask(Text * lines, int offset):Task(lines,offset) {
|
||
|
|
setTestId(lines->get(offset+2));
|
||
|
|
setMakefileText(lines->get(offset+3));
|
||
|
|
setState(Waiting);
|
||
|
|
kernels=1;
|
||
|
|
}
|
||
|
|
|
||
|
|
virtual void prepareWorkspace(){
|
||
|
|
String makeFilePath = String(id)+"/Makefile";
|
||
|
|
File makeFileFile = File(makeFilePath, this->makefile_text);
|
||
|
|
String tests = userWorkspace+"/projects";
|
||
|
|
String testPath= tests+"/"+test_id;
|
||
|
|
String copyCommand = "cp -r " + String::DQuotes(testPath + "/.") + " "+ String::DQuotes(workspace);
|
||
|
|
system(copyCommand.getCharArray());
|
||
|
|
}
|
||
|
|
virtual String getLaunchScriptText(){
|
||
|
|
String modules = userWorkspace+"/modules";
|
||
|
|
String starterCall = modules+"/starter";
|
||
|
|
String launcherCall = modules+"/launcher";
|
||
|
|
return String::DQuotes(starterCall)+" "+
|
||
|
|
String::DQuotes(launcherCall)+" "+
|
||
|
|
String(maxtime)+" "+
|
||
|
|
String::DQuotes("")+" "+
|
||
|
|
"make -j -f Makefile";
|
||
|
|
}
|
||
|
|
virtual void analyseResults(){
|
||
|
|
String binary = workspace+"/0";
|
||
|
|
state = Utils::Exists(binary)? Done:DoneWithErrors;
|
||
|
|
}
|
||
|
|
};
|