Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
//===-- MSVCPaths.h - MSVC path-parsing helpers -----------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
 
9
#ifndef LLVM_WINDOWSDRIVER_MSVCPATHS_H
10
#define LLVM_WINDOWSDRIVER_MSVCPATHS_H
11
 
12
#include "llvm/ADT/SmallString.h"
13
#include "llvm/ADT/StringRef.h"
14
#include "llvm/ADT/Triple.h"
15
#include <optional>
16
#include <string>
17
 
18
namespace llvm {
19
 
20
namespace vfs {
21
class FileSystem;
22
}
23
 
24
enum class SubDirectoryType {
25
  Bin,
26
  Include,
27
  Lib,
28
};
29
 
30
enum class ToolsetLayout {
31
  OlderVS,
32
  VS2017OrNewer,
33
  DevDivInternal,
34
};
35
 
36
// Windows SDKs and VC Toolchains group their contents into subdirectories based
37
// on the target architecture. This function converts an llvm::Triple::ArchType
38
// to the corresponding subdirectory name.
39
const char *archToWindowsSDKArch(llvm::Triple::ArchType Arch);
40
 
41
// Similar to the above function, but for Visual Studios before VS2017.
42
const char *archToLegacyVCArch(llvm::Triple::ArchType Arch);
43
 
44
// Similar to the above function, but for DevDiv internal builds.
45
const char *archToDevDivInternalArch(llvm::Triple::ArchType Arch);
46
 
47
bool appendArchToWindowsSDKLibPath(int SDKMajor, llvm::SmallString<128> LibPath,
48
                                   llvm::Triple::ArchType Arch,
49
                                   std::string &path);
50
 
51
// Get the path to a specific subdirectory in the current toolchain for
52
// a given target architecture.
53
// VS2017 changed the VC toolchain layout, so this should be used instead
54
// of hardcoding paths.
55
std::string getSubDirectoryPath(SubDirectoryType Type, ToolsetLayout VSLayout,
56
                                const std::string &VCToolChainPath,
57
                                llvm::Triple::ArchType TargetArch,
58
                                llvm::StringRef SubdirParent = "");
59
 
60
// Check if the Include path of a specified version of Visual Studio contains
61
// specific header files. If not, they are probably shipped with Universal CRT.
62
bool useUniversalCRT(ToolsetLayout VSLayout, const std::string &VCToolChainPath,
63
                     llvm::Triple::ArchType TargetArch,
64
                     llvm::vfs::FileSystem &VFS);
65
 
66
/// Get Windows SDK installation directory.
67
bool getWindowsSDKDir(vfs::FileSystem &VFS,
68
                      std::optional<llvm::StringRef> WinSdkDir,
69
                      std::optional<llvm::StringRef> WinSdkVersion,
70
                      std::optional<llvm::StringRef> WinSysRoot,
71
                      std::string &Path, int &Major,
72
                      std::string &WindowsSDKIncludeVersion,
73
                      std::string &WindowsSDKLibVersion);
74
 
75
bool getUniversalCRTSdkDir(vfs::FileSystem &VFS,
76
                           std::optional<llvm::StringRef> WinSdkDir,
77
                           std::optional<llvm::StringRef> WinSdkVersion,
78
                           std::optional<llvm::StringRef> WinSysRoot,
79
                           std::string &Path, std::string &UCRTVersion);
80
 
81
// Check command line arguments to try and find a toolchain.
82
bool findVCToolChainViaCommandLine(
83
    vfs::FileSystem &VFS, std::optional<llvm::StringRef> VCToolsDir,
84
    std::optional<llvm::StringRef> VCToolsVersion,
85
    std::optional<llvm::StringRef> WinSysRoot, std::string &Path,
86
    ToolsetLayout &VSLayout);
87
 
88
// Check various environment variables to try and find a toolchain.
89
bool findVCToolChainViaEnvironment(vfs::FileSystem &VFS, std::string &Path,
90
                                   ToolsetLayout &VSLayout);
91
 
92
// Query the Setup Config server for installs, then pick the newest version
93
// and find its default VC toolchain.
94
// This is the preferred way to discover new Visual Studios, as they're no
95
// longer listed in the registry.
96
bool findVCToolChainViaSetupConfig(vfs::FileSystem &VFS, std::string &Path,
97
                                   ToolsetLayout &VSLayout);
98
 
99
// Look in the registry for Visual Studio installs, and use that to get
100
// a toolchain path. VS2017 and newer don't get added to the registry.
101
// So if we find something here, we know that it's an older version.
102
bool findVCToolChainViaRegistry(std::string &Path, ToolsetLayout &VSLayout);
103
 
104
} // namespace llvm
105
 
106
#endif