thakis created this revision. thakis added a reviewer: hans. Herald added subscribers: dang, pengfei. Herald added a reviewer: jansvoboda11. thakis requested review of this revision.
On non-Windows platforms, --sysroot can be used to make the compiler use a single, hermetic directory for all header and library files. This is useful, but difficult to do on Windows. After D95472 <https://reviews.llvm.org/D95472> it's possible to achieve this with two flags: out/gn/bin/clang-cl win.c -fuse-ld=lld \ /vctoolsdir path/to/VC/Tools/MSVC/14.26.28801 \ /winsdkdir path/to/win_sdk But that's still cumbersome: It requires two flags instead of one, and it requires writing down the (changing) VC/Tools/MSVC version. Require a new /winsysroot <dir> flag that's effectively an alias to these two flags. `/winsysroot <dir>` is effetively an alias for these two flags. It adds `/vctoolsdir <dir>/VC/Tools/MSVC/<vctoolsversion>`, where <vctoolsversion> is the subdirectory of VC/Tools/MSVC with the highest number. (This also adds a flag /vctoolsversion to explicitly set that version for full determinism, similar to /winsdkversion>). Given that %VCToolsInstallDir% is something like "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.25.28610\" looking at VC/Tools/... below /winsysroot seems like an obvious choice. %WindowsSDKDir% and %UniversalCRTDir% both expand to "C:\Program Files (x86)\Windows Kits\10\", so it's less obvious an what subdirectory /winsdkdir should be below the sysroot. "Windows Kits/10" has the drawback that it contains a space and yet another number. Ideally the contents of that directory would be available under some short name, so I went with `/winsdkdir <dir>/win_sdk`. I'm not married to this though. Maybe `<dir>/WinSdk` looks move like `VC/Tools/MSVC`? --- This is missing the actual code change for now. I figured I'd send out the CL description early so we can get a head start on discussing the path names. https://reviews.llvm.org/D95534 Files: clang/include/clang/Driver/Options.td Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -5762,10 +5762,15 @@ def _SLASH_TP : CLCompileFlag<"TP">, HelpText<"Treat all source files as C++">; def _SLASH_vctoolsdir : CLJoinedOrSeparate<"vctoolsdir">, HelpText<"Path to the VCToolChain">, MetaVarName<"<dir>">; +def _SLASH_vctoolsversion : CLJoinedOrSeparate<"vctoolsversion">, + HelpText<"For use with /winsysroot, defaults to newest found">; def _SLASH_winsdkdir : CLJoinedOrSeparate<"winsdkdir">, HelpText<"Path to the Windows SDK">, MetaVarName<"<dir>">; def _SLASH_winsdkversion : CLJoinedOrSeparate<"winsdkversion">, - HelpText<"Full version of the Windows SDK">; + HelpText<"Full version of the Windows SDK, defaults to newest found">; +def _SLASH_winsysroot : CLJoinedOrSeparate<"winsysroot">, + HelpText<"Same as /vctoolsdir<dir>/VC/Tools/MSVC/<vctoolsversion> /winsdkdir<dir>/win_sdk">, + MetaVarName<"<dir>">; def _SLASH_volatile_iso : Option<["/", "-"], "volatile:iso", KIND_FLAG>, Group<_SLASH_volatile_Group>, Flags<[CLOption, NoXarchOption]>, HelpText<"Volatile loads and stores have standard semantics">;
Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -5762,10 +5762,15 @@ def _SLASH_TP : CLCompileFlag<"TP">, HelpText<"Treat all source files as C++">; def _SLASH_vctoolsdir : CLJoinedOrSeparate<"vctoolsdir">, HelpText<"Path to the VCToolChain">, MetaVarName<"<dir>">; +def _SLASH_vctoolsversion : CLJoinedOrSeparate<"vctoolsversion">, + HelpText<"For use with /winsysroot, defaults to newest found">; def _SLASH_winsdkdir : CLJoinedOrSeparate<"winsdkdir">, HelpText<"Path to the Windows SDK">, MetaVarName<"<dir>">; def _SLASH_winsdkversion : CLJoinedOrSeparate<"winsdkversion">, - HelpText<"Full version of the Windows SDK">; + HelpText<"Full version of the Windows SDK, defaults to newest found">; +def _SLASH_winsysroot : CLJoinedOrSeparate<"winsysroot">, + HelpText<"Same as /vctoolsdir<dir>/VC/Tools/MSVC/<vctoolsversion> /winsdkdir<dir>/win_sdk">, + MetaVarName<"<dir>">; def _SLASH_volatile_iso : Option<["/", "-"], "volatile:iso", KIND_FLAG>, Group<_SLASH_volatile_Group>, Flags<[CLOption, NoXarchOption]>, HelpText<"Volatile loads and stores have standard semantics">;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits