[cfe-dev] cfe-dev Digest, Vol 46, Issue 91
Speziale Ettore
speziale.ettore at gmail.com
Tue May 3 00:25:37 PDT 2011
Hi,
> Thank you very much, it seems very interesting and I think it will greatly
> help me. The current Clover code uses clang::CompilerInstance, and this class
> has a clang::CompilerInstance::getSourceManager() function that can be used to
> add a memory buffer as source like you did.
>
> Thanks,
> Denis Steckelmacher.
Here at Politecnico we are currently build directly a CompilerInstance
from the command line. This allows to add compiler options from the
OpenCL API or from the environment (EnvCompilerOpts, not standard, used
for debugging). I don't known if there are a better solution. However,
this is the code:
void Program::BuildCompilerInvocation(
Device &Dev,
llvm::StringRef UserOpts,
clang::CompilerInvocation &Invocation) {
std::istringstream ISS(EnvCompilerOpts + UserOpts.str());
std::string Token;
llvm::SmallVector<const char *, 16> Argv;
while(ISS >> Token) {
char *CurArg = new char[Token.size() + 1];
std::strcpy(CurArg, Token.c_str());
Argv.push_back(CurArg);
}
Argv.push_back("opencl-sources.cl");
clang::CompilerInvocation::CreateFromArgs(Invocation,
Argv.data(),
Argv.data() + Argv.size(),
*Diag);
Invocation.setLangDefaults(clang::IK_OpenCL);
clang::PreprocessorOptions &PreprocOpts =
Invocation.getPreprocessorOpts();
PreprocOpts.addRemappedFile("opencl-sources.cl", &*Src);
PreprocOpts.RetainRemappedFileBuffers = true;
Dev.SetTargetOptions(Invocation.getTargetOpts());
}
I think this code was originally from Peter Collingbourne, but I don't
rembember the exact location where I have see it.
Best regards,
speziale.ettore at gmail.com
More information about the cfe-dev
mailing list