clover: Fix not setting build log if the build succeeds v2
If there were only warnings, they would not be added to the log. v2: - Use compat::string. Reviewed-by: Francisco Jerez <currojerez@riseup.net>
This commit is contained in:

committed by
Tom Stellard

parent
d2504ead2f
commit
2ab44f657e
@@ -32,7 +32,8 @@ namespace clover {
|
|||||||
module compile_program_llvm(const compat::string &source,
|
module compile_program_llvm(const compat::string &source,
|
||||||
pipe_shader_ir ir,
|
pipe_shader_ir ir,
|
||||||
const compat::string &target,
|
const compat::string &target,
|
||||||
const compat::string &opts);
|
const compat::string &opts,
|
||||||
|
compat::string &r_log);
|
||||||
|
|
||||||
module compile_program_tgsi(const compat::string &source);
|
module compile_program_tgsi(const compat::string &source);
|
||||||
}
|
}
|
||||||
|
@@ -66,8 +66,8 @@ namespace clover {
|
|||||||
|
|
||||||
class build_error : public error {
|
class build_error : public error {
|
||||||
public:
|
public:
|
||||||
build_error(const compat::string &log) :
|
build_error(const compat::string &what = "") :
|
||||||
error(CL_BUILD_PROGRAM_FAILURE, log) {
|
error(CL_BUILD_PROGRAM_FAILURE, what) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -52,15 +52,18 @@ program::build(const ref_vector<device> &devs, const char *opts) {
|
|||||||
|
|
||||||
_opts.insert({ &dev, opts });
|
_opts.insert({ &dev, opts });
|
||||||
|
|
||||||
|
compat::string log;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
auto module = (dev.ir_format() == PIPE_SHADER_IR_TGSI ?
|
auto module = (dev.ir_format() == PIPE_SHADER_IR_TGSI ?
|
||||||
compile_program_tgsi(_source) :
|
compile_program_tgsi(_source) :
|
||||||
compile_program_llvm(_source, dev.ir_format(),
|
compile_program_llvm(_source, dev.ir_format(),
|
||||||
dev.ir_target(), build_opts(dev)));
|
dev.ir_target(), build_opts(dev),
|
||||||
|
log));
|
||||||
_binaries.insert({ &dev, module });
|
_binaries.insert({ &dev, module });
|
||||||
|
_logs.insert({ &dev, std::string(log.c_str()) });
|
||||||
} catch (build_error &e) {
|
} catch (const build_error &) {
|
||||||
_logs.insert({ &dev, e.what() });
|
_logs.insert({ &dev, std::string(log.c_str()) });
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -120,7 +120,7 @@ namespace {
|
|||||||
compile(llvm::LLVMContext &llvm_ctx, const std::string &source,
|
compile(llvm::LLVMContext &llvm_ctx, const std::string &source,
|
||||||
const std::string &name, const std::string &triple,
|
const std::string &name, const std::string &triple,
|
||||||
const std::string &processor, const std::string &opts,
|
const std::string &processor, const std::string &opts,
|
||||||
clang::LangAS::Map& address_spaces) {
|
clang::LangAS::Map& address_spaces, compat::string &r_log) {
|
||||||
|
|
||||||
clang::CompilerInstance c;
|
clang::CompilerInstance c;
|
||||||
clang::EmitLLVMOnlyAction act(&llvm_ctx);
|
clang::EmitLLVMOnlyAction act(&llvm_ctx);
|
||||||
@@ -224,11 +224,14 @@ namespace {
|
|||||||
c.getCodeGenOpts().LinkBitcodeFile = libclc_path;
|
c.getCodeGenOpts().LinkBitcodeFile = libclc_path;
|
||||||
|
|
||||||
// Compile the code
|
// Compile the code
|
||||||
if (!c.ExecuteAction(act))
|
bool ExecSuccess = c.ExecuteAction(act);
|
||||||
throw build_error(log);
|
r_log = log;
|
||||||
|
|
||||||
|
if (!ExecSuccess)
|
||||||
|
throw build_error();
|
||||||
|
|
||||||
// Get address spaces map to be able to find kernel argument address space
|
// Get address spaces map to be able to find kernel argument address space
|
||||||
memcpy(address_spaces, c.getTarget().getAddressSpaceMap(),
|
memcpy(address_spaces, c.getTarget().getAddressSpaceMap(),
|
||||||
sizeof(address_spaces));
|
sizeof(address_spaces));
|
||||||
|
|
||||||
return act.takeModule();
|
return act.takeModule();
|
||||||
@@ -391,7 +394,8 @@ module
|
|||||||
clover::compile_program_llvm(const compat::string &source,
|
clover::compile_program_llvm(const compat::string &source,
|
||||||
enum pipe_shader_ir ir,
|
enum pipe_shader_ir ir,
|
||||||
const compat::string &target,
|
const compat::string &target,
|
||||||
const compat::string &opts) {
|
const compat::string &opts,
|
||||||
|
compat::string &r_log) {
|
||||||
|
|
||||||
std::vector<llvm::Function *> kernels;
|
std::vector<llvm::Function *> kernels;
|
||||||
size_t processor_str_len = std::string(target.begin()).find_first_of("-");
|
size_t processor_str_len = std::string(target.begin()).find_first_of("-");
|
||||||
@@ -405,7 +409,7 @@ clover::compile_program_llvm(const compat::string &source,
|
|||||||
// The input file name must have the .cl extension in order for the
|
// The input file name must have the .cl extension in order for the
|
||||||
// CompilerInvocation class to recognize it as an OpenCL source file.
|
// CompilerInvocation class to recognize it as an OpenCL source file.
|
||||||
llvm::Module *mod = compile(llvm_ctx, source, "input.cl", triple, processor,
|
llvm::Module *mod = compile(llvm_ctx, source, "input.cl", triple, processor,
|
||||||
opts, address_spaces);
|
opts, address_spaces, r_log);
|
||||||
|
|
||||||
find_kernels(mod, kernels);
|
find_kernels(mod, kernels);
|
||||||
|
|
||||||
|
@@ -265,6 +265,9 @@ namespace clover {
|
|||||||
|
|
||||||
class string : public vector<char> {
|
class string : public vector<char> {
|
||||||
public:
|
public:
|
||||||
|
string() : vector() {
|
||||||
|
}
|
||||||
|
|
||||||
string(const char *p) : vector(p, std::strlen(p)) {
|
string(const char *p) : vector(p, std::strlen(p)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user