1 /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2 file Copyright.txt or https://cmake.org/licensing for details. */
5 #include "cmConfigure.h" // IWYU pragma: keep
12 #include <unordered_map>
16 #include "cmGeneratorTarget.h"
17 #include "cmVsProjectType.h"
19 class cmComputeLinkInformation
;
20 class cmCustomCommand
;
21 class cmCustomCommandGenerator
;
22 class cmGeneratedFileStream
;
23 class cmGlobalVisualStudio10Generator
;
24 class cmLocalVisualStudio10Generator
;
28 class cmVS10GeneratorOptions
;
30 class cmVisualStudio10TargetGenerator
33 cmVisualStudio10TargetGenerator(cmGeneratorTarget
* target
,
34 cmGlobalVisualStudio10Generator
* gg
);
35 ~cmVisualStudio10TargetGenerator();
37 cmVisualStudio10TargetGenerator(cmVisualStudio10TargetGenerator
const&) =
39 cmVisualStudio10TargetGenerator
& operator=(
40 cmVisualStudio10TargetGenerator
const&) = delete;
47 cmSourceFile
const* SourceFile
;
50 struct ToolSources
: public std::vector
<ToolSource
>
54 struct TargetsFileAndConfigs
57 std::vector
<std::string
> Configs
;
63 using ConfigToSettings
=
64 std::unordered_map
<std::string
,
65 std::unordered_map
<std::string
, std::string
>>;
67 std::string
ConvertPath(std::string
const& path
, bool forceRelative
);
68 std::string
CalcCondition(const std::string
& config
) const;
69 void WriteProjectConfigurations(Elem
& e0
);
70 void WriteProjectConfigurationValues(Elem
& e0
);
71 void WriteMSToolConfigurationValues(Elem
& e1
, std::string
const& config
);
72 void WriteCEDebugProjectConfigurationValues(Elem
& e0
);
73 void WriteMSToolConfigurationValuesManaged(Elem
& e1
,
74 std::string
const& config
);
75 void WriteMSToolConfigurationValuesCommon(Elem
& e1
,
76 std::string
const& config
);
77 void WriteHeaderSource(Elem
& e1
, cmSourceFile
const* sf
,
78 ConfigToSettings
const& toolSettings
);
79 void WriteExtraSource(Elem
& e1
, cmSourceFile
const* sf
,
80 ConfigToSettings
& toolSettings
);
81 void WriteNsightTegraConfigurationValues(Elem
& e1
,
82 std::string
const& config
);
83 void WriteAndroidConfigurationValues(Elem
& e1
, std::string
const& config
);
84 void WriteSource(Elem
& e2
, cmSourceFile
const* sf
);
85 void FinishWritingSource(Elem
& e2
, ConfigToSettings
const& toolSettings
);
86 void WriteExcludeFromBuild(Elem
& e2
,
87 std::vector
<size_t> const& exclude_configs
);
88 void WriteAllSources(Elem
& e0
);
89 void WritePackageReferences(Elem
& e0
);
90 void WriteDotNetReferences(Elem
& e0
);
91 void WriteDotNetReference(Elem
& e1
, std::string
const& ref
,
92 std::string
const& hint
,
93 std::string
const& config
);
94 void WriteDotNetDocumentationFile(Elem
& e0
);
95 void WriteImports(Elem
& e0
);
96 void WriteDotNetReferenceCustomTags(Elem
& e2
, std::string
const& ref
);
97 void WriteEmbeddedResourceGroup(Elem
& e0
);
98 void WriteWinRTReferences(Elem
& e0
);
99 void WriteWinRTPackageCertificateKeyFile(Elem
& e0
);
100 void WriteXamlFilesGroup(Elem
& e0
);
101 void WritePathAndIncrementalLinkOptions(Elem
& e0
);
102 void WritePublicProjectContentOptions(Elem
& e0
);
103 void WriteItemDefinitionGroups(Elem
& e0
);
104 void VerifyNecessaryFiles();
105 void WriteMissingFiles(Elem
& e1
);
106 void WriteMissingFilesWP80(Elem
& e1
);
107 void WriteMissingFilesWP81(Elem
& e1
);
108 void WriteMissingFilesWS80(Elem
& e1
);
109 void WriteMissingFilesWS81(Elem
& e1
);
110 void WriteMissingFilesWS10_0(Elem
& e1
);
111 void WritePlatformExtensions(Elem
& e1
);
112 void WriteSinglePlatformExtension(Elem
& e1
, std::string
const& extension
,
113 std::string
const& version
);
114 void WriteSDKReferences(Elem
& e0
);
115 void WriteSingleSDKReference(Elem
& e1
, std::string
const& extension
,
116 std::string
const& version
);
117 void WriteCommonMissingFiles(Elem
& e1
, const std::string
& manifestFile
);
118 void WriteTargetSpecificReferences(Elem
& e0
);
119 void WriteTargetsFileReferences(Elem
& e1
);
121 std::vector
<std::string
> GetIncludes(std::string
const& config
,
122 std::string
const& lang
) const;
123 std::string
GetTargetOutputName() const;
125 bool ComputeClOptions();
126 bool ComputeClOptions(std::string
const& configName
);
127 void WriteClOptions(Elem
& e1
, std::string
const& config
);
128 bool ComputeRcOptions();
129 bool ComputeRcOptions(std::string
const& config
);
130 void WriteRCOptions(Elem
& e1
, std::string
const& config
);
131 bool ComputeCudaOptions();
132 bool ComputeCudaOptions(std::string
const& config
);
133 void WriteCudaOptions(Elem
& e1
, std::string
const& config
);
135 bool ComputeCudaLinkOptions();
136 bool ComputeCudaLinkOptions(std::string
const& config
);
137 void WriteCudaLinkOptions(Elem
& e1
, std::string
const& config
);
139 bool ComputeMarmasmOptions();
140 bool ComputeMarmasmOptions(std::string
const& config
);
141 void WriteMarmasmOptions(Elem
& e1
, std::string
const& config
);
142 bool ComputeMasmOptions();
143 bool ComputeMasmOptions(std::string
const& config
);
144 void WriteMasmOptions(Elem
& e1
, std::string
const& config
);
145 bool ComputeNasmOptions();
146 bool ComputeNasmOptions(std::string
const& config
);
147 void WriteNasmOptions(Elem
& e1
, std::string
const& config
);
149 bool ComputeLinkOptions();
150 bool ComputeLinkOptions(std::string
const& config
);
151 bool ComputeLibOptions();
152 bool ComputeLibOptions(std::string
const& config
);
153 void WriteLinkOptions(Elem
& e1
, std::string
const& config
);
154 void WriteMidlOptions(Elem
& e1
, std::string
const& config
);
155 void WriteAntBuildOptions(Elem
& e1
, std::string
const& config
);
156 void OutputLinkIncremental(Elem
& e1
, std::string
const& configName
);
157 void WriteCustomRule(Elem
& e0
, cmSourceFile
const* source
,
158 cmCustomCommand
const& command
);
159 enum class BuildInParallel
164 void WriteCustomRuleCpp(Elem
& e2
, std::string
const& config
,
165 std::string
const& script
,
166 std::string
const& additional_inputs
,
167 std::string
const& outputs
,
168 std::string
const& comment
,
169 cmCustomCommandGenerator
const& ccg
, bool symbolic
,
170 BuildInParallel buildInParallel
);
171 void WriteCustomRuleCSharp(Elem
& e0
, std::string
const& config
,
172 std::string
const& commandName
,
173 std::string
const& script
,
174 std::string
const& inputs
,
175 std::string
const& outputs
,
176 std::string
const& comment
,
177 cmCustomCommandGenerator
const& ccg
);
178 void WriteCustomCommands(Elem
& e0
);
179 void WriteCustomCommand(Elem
& e0
, cmSourceFile
const* sf
);
181 void WriteProjectReferences(Elem
& e0
);
182 void WriteApplicationTypeSettings(Elem
& e1
);
183 void OutputSourceSpecificFlags(Elem
& e2
, cmSourceFile
const* source
);
184 void AddLibraries(const cmComputeLinkInformation
& cli
,
185 std::vector
<std::string
>& libVec
,
186 std::vector
<std::string
>& vsTargetVec
,
187 const std::string
& config
);
188 void AddTargetsFileAndConfigPair(std::string
const& targetsFile
,
189 std::string
const& config
);
190 void WriteLibOptions(Elem
& e1
, std::string
const& config
);
191 void WriteManifestOptions(Elem
& e1
, std::string
const& config
);
192 void WriteEvents(Elem
& e1
, std::string
const& configName
);
193 void WriteEvent(Elem
& e1
, std::string
const& name
,
194 std::vector
<cmCustomCommand
> const& commands
,
195 std::string
const& configName
);
196 void WriteGroupSources(Elem
& e0
, std::string
const& name
,
197 ToolSources
const& sources
,
198 std::vector
<cmSourceGroup
>&);
199 void AddMissingSourceGroups(std::set
<cmSourceGroup
const*>& groupsUsed
,
200 const std::vector
<cmSourceGroup
>& allGroups
);
201 bool IsResxHeader(const std::string
& headerFile
);
202 bool IsXamlHeader(const std::string
& headerFile
);
203 bool IsXamlSource(const std::string
& headerFile
);
205 bool ForceOld(const std::string
& source
) const;
207 void GetCSharpSourceProperties(cmSourceFile
const* sf
,
208 std::map
<std::string
, std::string
>& tags
);
209 void WriteCSharpSourceProperties(
210 Elem
& e2
, const std::map
<std::string
, std::string
>& tags
);
211 std::string
GetCSharpSourceLink(cmSourceFile
const* source
);
213 void WriteStdOutEncodingUtf8(Elem
& e1
);
216 friend class cmVS10GeneratorOptions
;
217 using Options
= cmVS10GeneratorOptions
;
218 using OptionsMap
= std::map
<std::string
, std::unique_ptr
<Options
>>;
219 OptionsMap ClOptions
;
220 OptionsMap RcOptions
;
221 OptionsMap CudaOptions
;
222 OptionsMap CudaLinkOptions
;
223 OptionsMap MarmasmOptions
;
224 OptionsMap MasmOptions
;
225 OptionsMap NasmOptions
;
226 OptionsMap LinkOptions
;
227 std::string LangForClCompile
;
229 VsProjectType ProjectType
;
231 std::vector
<std::string
> Configurations
;
232 std::vector
<TargetsFileAndConfigs
> TargetsFileAndConfigsVec
;
233 cmGeneratorTarget
* const GeneratorTarget
;
234 cmMakefile
* const Makefile
;
235 std::string
const Platform
;
236 std::string
const Name
;
237 std::string
const GUID
;
242 bool HaveCustomCommandDepfile
= false;
243 std::map
<std::string
, bool> ScanSourceForModuleDependencies
;
244 unsigned int NsightTegraVersion
[4];
245 bool TargetCompileAsWinRT
;
246 std::set
<std::string
> IPOEnabledConfigurations
;
247 std::set
<std::string
> ASanEnabledConfigurations
;
248 std::set
<std::string
> FuzzerEnabledConfigurations
;
249 std::map
<std::string
, std::string
> SpectreMitigation
;
250 cmGlobalVisualStudio10Generator
* const GlobalGenerator
;
251 cmLocalVisualStudio10Generator
* const LocalGenerator
;
252 std::set
<std::string
> CSharpCustomCommandNames
;
254 std::vector
<std::string
> AddedFiles
;
255 std::string DefaultArtifactDir
;
256 bool AddedDefaultCertificate
= false;
257 // managed C++/C# relevant members
258 using DotNetHintReference
= std::pair
<std::string
, std::string
>;
259 using DotNetHintReferenceList
= std::vector
<DotNetHintReference
>;
260 using DotNetHintReferenceMap
=
261 std::map
<std::string
, DotNetHintReferenceList
>;
262 DotNetHintReferenceMap DotNetHintReferences
;
263 using UsingDirectories
= std::set
<std::string
>;
264 using UsingDirectoriesMap
= std::map
<std::string
, UsingDirectories
>;
265 UsingDirectoriesMap AdditionalUsingDirectories
;
267 using ToolSourceMap
= std::map
<std::string
, ToolSources
>;
270 std::set
<std::string
> ExpectedResxHeaders
;
271 std::set
<std::string
> ExpectedXamlHeaders
;
272 std::set
<std::string
> ExpectedXamlSources
;
273 std::vector
<cmSourceFile
const*> ResxObjs
;
274 std::vector
<cmSourceFile
const*> XamlObjs
;
275 void ClassifyAllConfigSources();
276 void ClassifyAllConfigSource(cmGeneratorTarget::AllConfigSource
const& acs
);
278 // .Net SDK-stype project variable and helper functions
279 void WriteClassicMsBuildProjectFile(cmGeneratedFileStream
& BuildFileStream
);
280 void WriteSdkStyleProjectFile(cmGeneratedFileStream
& BuildFileStream
);
282 void WriteCommonPropertyGroupGlobals(
283 cmVisualStudio10TargetGenerator::Elem
& e1
);
285 bool HasCustomCommands() const;
287 std::unordered_map
<std::string
, ConfigToSettings
> ParsedToolTargetSettings
;
288 bool PropertyIsSameInAllConfigs(const ConfigToSettings
& toolSettings
,
289 const std::string
& propName
);
290 void ParseSettingsProperty(const std::string
& settingsPropertyValue
,
291 ConfigToSettings
& toolSettings
);
292 std::string
GetCMakeFilePath(const char* name
) const;