@@ -6783,9 +6783,9 @@ void Clang::AddClangCLArgs(const ArgList &Args, types::ID InputType,
6783
6783
bool *EmitCodeView) const {
6784
6784
unsigned RTOptionID = options::OPT__SLASH_MT;
6785
6785
bool isNVPTX = getToolChain ().getTriple ().isNVPTX ();
6786
- bool isSYCL =
6787
- Args.hasArg (options::OPT_fsycl) ||
6786
+ bool isSYCLDevice =
6788
6787
getToolChain ().getTriple ().getEnvironment () == llvm::Triple::SYCLDevice;
6788
+ bool isSYCL = Args.hasArg (options::OPT_fsycl) || isSYCLDevice;
6789
6789
// For SYCL Windows, /MD is the default.
6790
6790
if (isSYCL)
6791
6791
RTOptionID = options::OPT__SLASH_MD;
@@ -6797,38 +6797,42 @@ void Clang::AddClangCLArgs(const ArgList &Args, types::ID InputType,
6797
6797
6798
6798
if (Arg *A = Args.getLastArg (options::OPT__SLASH_M_Group)) {
6799
6799
RTOptionID = A->getOption ().getID ();
6800
- if (isSYCL && (RTOptionID == options::OPT__SLASH_MT ||
6801
- RTOptionID == options::OPT__SLASH_MTd))
6800
+ if (isSYCL && !isSYCLDevice &&
6801
+ (RTOptionID == options::OPT__SLASH_MT ||
6802
+ RTOptionID == options::OPT__SLASH_MTd))
6802
6803
// Use of /MT or /MTd is not supported for SYCL.
6803
6804
getToolChain ().getDriver ().Diag (diag::err_drv_unsupported_opt_dpcpp)
6804
6805
<< A->getOption ().getName ();
6805
6806
}
6806
6807
6808
+ enum { addDEBUG = 0x1 , addMT = 0x2 , addDLL = 0x4 };
6809
+ auto addPreDefines = [&](unsigned Defines) {
6810
+ if (Defines & addDEBUG)
6811
+ CmdArgs.push_back (" -D_DEBUG" );
6812
+ if (Defines & addMT && !isSYCLDevice)
6813
+ CmdArgs.push_back (" -D_MT" );
6814
+ if (Defines & addDLL && !isSYCLDevice)
6815
+ CmdArgs.push_back (" -D_DLL" );
6816
+ };
6807
6817
StringRef FlagForCRT;
6808
6818
switch (RTOptionID) {
6809
6819
case options::OPT__SLASH_MD:
6810
- if (Args.hasArg (options::OPT__SLASH_LDd))
6811
- CmdArgs.push_back (" -D_DEBUG" );
6812
- CmdArgs.push_back (" -D_MT" );
6813
- CmdArgs.push_back (" -D_DLL" );
6820
+ addPreDefines ((Args.hasArg (options::OPT__SLASH_LDd) ? addDEBUG : 0x0 ) |
6821
+ addMT | addDLL);
6814
6822
FlagForCRT = " --dependent-lib=msvcrt" ;
6815
6823
break ;
6816
6824
case options::OPT__SLASH_MDd:
6817
- CmdArgs.push_back (" -D_DEBUG" );
6818
- CmdArgs.push_back (" -D_MT" );
6819
- CmdArgs.push_back (" -D_DLL" );
6825
+ addPreDefines (addDEBUG | addMT | addDLL);
6820
6826
FlagForCRT = " --dependent-lib=msvcrtd" ;
6821
6827
break ;
6822
6828
case options::OPT__SLASH_MT:
6823
- if (Args.hasArg (options::OPT__SLASH_LDd))
6824
- CmdArgs.push_back (" -D_DEBUG" );
6825
- CmdArgs.push_back (" -D_MT" );
6829
+ addPreDefines ((Args.hasArg (options::OPT__SLASH_LDd) ? addDEBUG : 0x0 ) |
6830
+ addMT);
6826
6831
CmdArgs.push_back (" -flto-visibility-public-std" );
6827
6832
FlagForCRT = " --dependent-lib=libcmt" ;
6828
6833
break ;
6829
6834
case options::OPT__SLASH_MTd:
6830
- CmdArgs.push_back (" -D_DEBUG" );
6831
- CmdArgs.push_back (" -D_MT" );
6835
+ addPreDefines (addDEBUG | addMT);
6832
6836
CmdArgs.push_back (" -flto-visibility-public-std" );
6833
6837
FlagForCRT = " --dependent-lib=libcmtd" ;
6834
6838
break ;
0 commit comments