-
Notifications
You must be signed in to change notification settings - Fork 166
Expand file tree
/
Copy pathvisualCpp.dsc
More file actions
136 lines (115 loc) · 6.6 KB
/
Copy pathvisualCpp.dsc
File metadata and controls
136 lines (115 loc) · 6.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
import {Transformer} from "Sdk.Transformers";
import * as Managed from "Sdk.Managed";
import * as BuildXLSdk from "Sdk.BuildXL";
export declare const qualifier: {
platform: "x86" | "x64";
};
const isInternal = Environment.getFlag("[Sdk.BuildXL]microsoftInternal"); // Indicates whether to use the MSVC nuget package
const pkgContents = getMsvcPackage();
const rootFolder = isInternal ? r`lib/native` : r`.`;
@@public
export const cvtResTool = createMsvcTool(a`CvtRes.exe`, "Microsoft Resource to Object Converter");
@@public
export const clTool = createMsvcTool(a`cl.exe`, "Microsoft C/C++ compiler");
@@public
export const linkTool = createMsvcTool(a`Link.exe`, "Microsoft Linker");
@@public
export const libTool = createMsvcTool(a`Lib.exe`, "Microsoft Library Manager");
@@public
export const espXEngineDll = isInternal
? pkgContents.getFile(r`lib/native/bin/${"Host" + qualifier.platform}/${qualifier.platform}/EspXEngine.dll`)
: pkgContents.getFile(r`bin/${"Host" + qualifier.platform}/${qualifier.platform}/EspXEngine.dll`);
export namespace AtlMfc {
@@public
export const include = pkgContents.ensureContents({subFolder: r`${rootFolder}/atlmfc/include`});
@@public
export const lib = pkgContents.ensureContents({subFolder: r`${rootFolder}/atlmfc/lib/${qualifier.platform}`});
}
@@public
export const include = pkgContents.ensureContents({subFolder: r`${rootFolder}/include`});
@@public
export const lib = pkgContents.ensureContents({subFolder: r`${rootFolder}/lib/spectre/${qualifier.platform}`});
/**
* Gets a list of surviving child processes that cl.exe may create. NOTE: Do not add any
* processes here that write meaningful outputs to disk.
* VCTIP.EXE - "VC++ Technology Improvement Program" uploader used for telemetry.
*/
@@public
export const msvcBreakawayProcesses : PathAtom[] = [a`VCTIP.EXE`];
// narrowed down sealed directory with just the tools folder
const toolContents = pkgContents.ensureContents({subFolder: r`${rootFolder}/bin/${"Host" + qualifier.platform}/${qualifier.platform}`});
function createMsvcTool(exe: PathAtom, description: string) : Transformer.ToolDefinition
{
return {
exe: toolContents.getFile(exe),
description: description,
runtimeDirectoryDependencies: [
toolContents
],
prepareTempDirectory: true,
dependsOnWindowsDirectories: true,
dependsOnAppDataDirectory: true,
untrackedDirectoryScopes: [
d`${Context.getMount("ProgramData").path}/microsoft/netFramework/breadcrumbStore`,
// cl.exe or child processes will create this directory if it doesn't exist
// Then it will write MachineStorage.dat and MachineStorage.dat.bak to it.
d`${Context.getMount("ProgramData").path}/Microsoft Visual Studio`,
// Temporary state files accessed by VCTIP.EXE
d`${Context.getMount("ProgramData").path}/Microsoft/VisualStudio/Packages`,
],
runtimeDependencies: [
f`${Context.getMount("ProgramData").path}/Microsoft/VisualStudio/Setup/${qualifier.platform}/Microsoft.VisualStudio.Setup.Configuration.Native.dll`,
],
};
}
/**
* When building internally, returns the VisualCppTools.Internal.VS2017Layout package.
* When building externally, search for the Visual Studio 2019 build tools directory.
*/
function getMsvcPackage() : StaticDirectory {
// The VisualCppTools.Community.VS2017Layout package has been deprecated for external users.
// Due to this, when building externally, the Visual C++ build tools must be installed manually.
// Please see the BuildXL README on how to build externally.
if (isInternal) {
return importFrom("VisualCppTools.Internal.VS2017Layout").Contents.all;
}
else {
let msvcVersions = [
"14.39.33519"
];
// ADO will set this variable if the version above is not installed
if (Environment.hasVariable("MSVC_VERSION")) {
msvcVersions = msvcVersions.push(Environment.getStringValue("MSVC_VERSION"));
}
const buildToolsDirectories = [
d`${Context.getMount("ProgramFilesX86").path}/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC`,
d`${Context.getMount("ProgramFilesX86").path}/Microsoft Visual Studio/2019/Professional/VC/Tools/MSVC`,
d`${Context.getMount("ProgramFilesX86").path}/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC`,
d`${Context.getMount("ProgramFilesX86").path}/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC`,
d`${Context.getMount("ProgramFilesX86").path}/Microsoft Visual Studio/2019/Preview/VC/Tools/MSVC`,
d`${Context.getMount("ProgramFilesX86").path}/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC`,
d`${Context.getMount("ProgramFilesX86").path}/Microsoft Visual Studio/2022/Professional/VC/Tools/MSVC`,
d`${Context.getMount("ProgramFilesX86").path}/Microsoft Visual Studio/2022/BuildTools/VC/Tools/MSVC`,
d`${Context.getMount("ProgramFilesX86").path}/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC`,
d`${Context.getMount("ProgramFilesX86").path}/Microsoft Visual Studio/2022/Preview/VC/Tools/MSVC`,
d`${Context.getMount("ProgramFiles").path}/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC`,
d`${Context.getMount("ProgramFiles").path}/Microsoft Visual Studio/2022/Professional/VC/Tools/MSVC`,
d`${Context.getMount("ProgramFiles").path}/Microsoft Visual Studio/2022/BuildTools/VC/Tools/MSVC`,
d`${Context.getMount("ProgramFiles").path}/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC`,
d`${Context.getMount("ProgramFiles").path}/Microsoft Visual Studio/2022/Preview/VC/Tools/MSVC`,
];
for (let buildToolsDirectory of buildToolsDirectories)
{
for (let version of msvcVersions)
{
const dir = d`${buildToolsDirectory.path}/${version}`;
if (Directory.exists(dir)) {
return Transformer.sealDirectory(dir, globR(dir, "*"));
}
}
}
Contract.fail(`Prerequisite Visual Studio 2022 build tools not found at any of the following locations: '${buildToolsDirectories}'. Please see BuildXL/Documentation/Wiki/DeveloperGuide.md on how to acquire these tools for building externally.`);
}
}