diff --git a/hipify-clang/src/LLVMCompat.cpp b/hipify-clang/src/LLVMCompat.cpp index 8bb3eeda25..1fe571e419 100644 --- a/hipify-clang/src/LLVMCompat.cpp +++ b/hipify-clang/src/LLVMCompat.cpp @@ -127,6 +127,14 @@ bool pragma_once_outside_header() { #endif } +bool canCompileHostAndDeviceInOneJob() { +#if LLVM_VERSION_MAJOR < 9 + return false; +#else + return true; +#endif +} + void RetainExcludedConditionalBlocks(clang::CompilerInstance &CI) { #if LLVM_VERSION_MAJOR > 9 clang::PreprocessorOptions &PPOpts = CI.getPreprocessorOpts(); diff --git a/hipify-clang/src/LLVMCompat.h b/hipify-clang/src/LLVMCompat.h index c91e2815e2..c1d671f513 100644 --- a/hipify-clang/src/LLVMCompat.h +++ b/hipify-clang/src/LLVMCompat.h @@ -85,6 +85,8 @@ std::error_code real_path(const Twine &path, SmallVectorImpl &output, bool pragma_once_outside_header(); +bool canCompileHostAndDeviceInOneJob(); + void RetainExcludedConditionalBlocks(clang::CompilerInstance &CI); bool CheckCompatibility(); diff --git a/hipify-clang/src/main.cpp b/hipify-clang/src/main.cpp index 64037c43dd..27dcf0b1ac 100644 --- a/hipify-clang/src/main.cpp +++ b/hipify-clang/src/main.cpp @@ -198,7 +198,11 @@ int main(int argc, const char **argv) { Tool.appendArgumentsAdjuster(ct::getInsertArgumentAdjuster(sInclude.c_str(), ct::ArgumentInsertPosition::BEGIN)); Tool.appendArgumentsAdjuster(ct::getInsertArgumentAdjuster("cuda", ct::ArgumentInsertPosition::BEGIN)); Tool.appendArgumentsAdjuster(ct::getInsertArgumentAdjuster("-x", ct::ArgumentInsertPosition::BEGIN)); - Tool.appendArgumentsAdjuster(ct::getInsertArgumentAdjuster("--cuda-host-only", ct::ArgumentInsertPosition::BEGIN)); + if (llcompat::canCompileHostAndDeviceInOneJob()) { + Tool.appendArgumentsAdjuster(ct::getInsertArgumentAdjuster("--cuda-compile-host-device", ct::ArgumentInsertPosition::BEGIN)); + } else { + Tool.appendArgumentsAdjuster(ct::getInsertArgumentAdjuster("--cuda-host-only", ct::ArgumentInsertPosition::BEGIN)); + } Tool.appendArgumentsAdjuster(ct::getInsertArgumentAdjuster("-fno-delayed-template-parsing", ct::ArgumentInsertPosition::BEGIN)); if (!CudaPath.empty()) { std::string sCudaPath = "--cuda-path=" + CudaPath;