Yes, it works. Thanks! On Wed, Oct 22, 2014 at 2:59 PM, Zachary Turner <[email protected]> wrote: > I've submitted r220434. That should fix it for you. > > On Wed, Oct 22, 2014 at 2:37 PM, Alexander Potapenko <[email protected]> > wrote: >> >> This broke our internal OSX bot: >> >> >> /Users/buildbot/src/llvm-buildbot/slave/mac10.9-cmake/build/llvm/tools/clang/lib/Driver/MSVCToolChain.cpp:245:22: >> error: ISO C++11 does not allow conversion from string literal to >> 'char *' [-Werror,-Wwritable-strings] >> char *tests[] = {"winv6.3", "win8", "win7"}; >> ^ >> >> /Users/buildbot/src/llvm-buildbot/slave/mac10.9-cmake/build/llvm/tools/clang/lib/Driver/MSVCToolChain.cpp:245:33: >> error: ISO C++11 does not allow conversion from string literal to >> 'char *' [-Werror,-Wwritable-strings] >> char *tests[] = {"winv6.3", "win8", "win7"}; >> ^ >> >> /Users/buildbot/src/llvm-buildbot/slave/mac10.9-cmake/build/llvm/tools/clang/lib/Driver/MSVCToolChain.cpp:245:41: >> error: ISO C++11 does not allow conversion from string literal to >> 'char *' [-Werror,-Wwritable-strings] >> char *tests[] = {"winv6.3", "win8", "win7"}; >> ^ >> 3 errors generated. >> >> Can you please take a look? >> >> On Wed, Oct 22, 2014 at 1:40 PM, Zachary Turner <[email protected]> >> wrote: >> > Author: zturner >> > Date: Wed Oct 22 15:40:43 2014 >> > New Revision: 220425 >> > >> > URL: http://llvm.org/viewvc/llvm-project?rev=220425&view=rev >> > Log: >> > Make a good guess about where MSVC and Windows SDK libraries are for >> > linking. >> > >> > When a user has not configured a standard Visual Studio environment >> > by running vcvarsall, clang tries its best to find Visual Studio >> > include files and executables anyway. This patch makes clang also >> > try to find system and Windows SDK libraries for linking against, >> > as well. >> > >> > Reviewed by: Hans Wennborg >> > Differential Revision: http://reviews.llvm.org/D5873 >> > >> > Modified: >> > cfe/trunk/lib/Driver/MSVCToolChain.cpp >> > cfe/trunk/lib/Driver/ToolChains.h >> > cfe/trunk/lib/Driver/Tools.cpp >> > >> > Modified: cfe/trunk/lib/Driver/MSVCToolChain.cpp >> > URL: >> > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/MSVCToolChain.cpp?rev=220425&r1=220424&r2=220425&view=diff >> > >> > ============================================================================== >> > --- cfe/trunk/lib/Driver/MSVCToolChain.cpp (original) >> > +++ cfe/trunk/lib/Driver/MSVCToolChain.cpp Wed Oct 22 15:40:43 2014 >> > @@ -212,6 +212,71 @@ bool MSVCToolChain::getWindowsSDKDir(std >> > return hasSDKDir && !path.empty(); >> > } >> > >> > +// Gets the library path required to link against the Windows SDK. >> > +bool MSVCToolChain::getWindowsSDKLibraryPath(std::string &path) const { >> > + std::string sdkPath; >> > + int sdkMajor = 0; >> > + int sdkMinor = 0; >> > + >> > + path.clear(); >> > + if (!getWindowsSDKDir(sdkPath, sdkMajor, sdkMinor)) >> > + return false; >> > + >> > + llvm::SmallString<128> libPath(sdkPath); >> > + llvm::sys::path::append(libPath, "Lib"); >> > + if (sdkMajor <= 7) { >> > + switch (getArch()) { >> > + // In Windows SDK 7.x, x86 libraries are directly in the Lib >> > folder. >> > + case llvm::Triple::x86: >> > + break; >> > + case llvm::Triple::x86_64: >> > + llvm::sys::path::append(libPath, "x64"); >> > + break; >> > + case llvm::Triple::arm: >> > + // It is not necessary to link against Windows SDK 7.x when >> > targeting ARM. >> > + return false; >> > + default: >> > + return false; >> > + } >> > + } else { >> > + // Windows SDK 8.x installs libraries in a folder whose names >> > depend on the >> > + // version of the OS you're targeting. By default choose the >> > newest, which >> > + // usually corresponds to the version of the OS you've installed >> > the SDK on. >> > + char *tests[] = {"winv6.3", "win8", "win7"}; >> > + bool found = false; >> > + for (char *test : tests) { >> > + llvm::SmallString<128> testPath(libPath); >> > + llvm::sys::path::append(testPath, test); >> > + if (llvm::sys::fs::exists(testPath.c_str())) { >> > + libPath = testPath; >> > + found = true; >> > + break; >> > + } >> > + } >> > + >> > + if (!found) >> > + return false; >> > + >> > + llvm::sys::path::append(libPath, "um"); >> > + switch (getArch()) { >> > + case llvm::Triple::x86: >> > + llvm::sys::path::append(libPath, "x86"); >> > + break; >> > + case llvm::Triple::x86_64: >> > + llvm::sys::path::append(libPath, "x64"); >> > + break; >> > + case llvm::Triple::arm: >> > + llvm::sys::path::append(libPath, "arm"); >> > + break; >> > + default: >> > + return false; >> > + } >> > + } >> > + >> > + path = libPath.str(); >> > + return true; >> > +} >> > + >> > // Get the location to use for Visual Studio binaries. The location >> > priority >> > // is: %VCINSTALLDIR% > %PATH% > newest copy of Visual Studio installed >> > on >> > // system (as reported by the registry). >> > >> > Modified: cfe/trunk/lib/Driver/ToolChains.h >> > URL: >> > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.h?rev=220425&r1=220424&r2=220425&view=diff >> > >> > ============================================================================== >> > --- cfe/trunk/lib/Driver/ToolChains.h (original) >> > +++ cfe/trunk/lib/Driver/ToolChains.h Wed Oct 22 15:40:43 2014 >> > @@ -746,6 +746,7 @@ public: >> > llvm::opt::ArgStringList &CC1Args) const >> > override; >> > >> > bool getWindowsSDKDir(std::string &path, int &major, int &minor) >> > const; >> > + bool getWindowsSDKLibraryPath(std::string &path) const; >> > bool getVisualStudioInstallDir(std::string &path) const; >> > bool getVisualStudioBinariesFolder(const char *clangProgramPath, >> > std::string &path) const; >> > >> > Modified: cfe/trunk/lib/Driver/Tools.cpp >> > URL: >> > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=220425&r1=220424&r2=220425&view=diff >> > >> > ============================================================================== >> > --- cfe/trunk/lib/Driver/Tools.cpp (original) >> > +++ cfe/trunk/lib/Driver/Tools.cpp Wed Oct 22 15:40:43 2014 >> > @@ -7854,6 +7854,39 @@ void visualstudio::Link::ConstructJob(Co >> > CmdArgs.push_back("-defaultlib:libcmt"); >> > } >> > >> > + if (!llvm::sys::Process::GetEnv("LIB")) { >> > + // If the VC environment hasn't been configured (perhaps because >> > the user >> > + // did not run vcvarsall), try to build a consistent link >> > environment. If >> > + // the environment variable is set however, assume the user knows >> > what he's >> > + // doing. >> > + std::string VisualStudioDir; >> > + const auto &MSVC = static_cast<const toolchains::MSVCToolChain >> > &>(getToolChain()); >> > + if (MSVC.getVisualStudioInstallDir(VisualStudioDir)) { >> > + SmallString<128> LibDir(VisualStudioDir); >> > + llvm::sys::path::append(LibDir, "VC", "lib"); >> > + switch (MSVC.getArch()) { >> > + case llvm::Triple::x86: >> > + // x86 just puts the libraries directly in lib >> > + break; >> > + case llvm::Triple::x86_64: >> > + llvm::sys::path::append(LibDir, "amd64"); >> > + break; >> > + case llvm::Triple::arm: >> > + llvm::sys::path::append(LibDir, "arm"); >> > + break; >> > + default: >> > + break; >> > + } >> > + CmdArgs.push_back( >> > + Args.MakeArgString(std::string("-libpath:") + >> > LibDir.c_str())); >> > + } >> > + >> > + std::string WindowsSdkLibPath; >> > + if (MSVC.getWindowsSDKLibraryPath(WindowsSdkLibPath)) >> > + CmdArgs.push_back(Args.MakeArgString(std::string("-libpath:") + >> > + WindowsSdkLibPath.c_str())); >> > + } >> > + >> > CmdArgs.push_back("-nologo"); >> > >> > if (Args.hasArg(options::OPT_g_Group)) { >> > >> > >> > _______________________________________________ >> > cfe-commits mailing list >> > [email protected] >> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >> >> >> >> -- >> Alexander Potapenko >> Software Engineer >> Google Moscow > >
-- Alexander Potapenko Software Engineer Google Moscow _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
