/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #ifndef cmVisualStudioTargetGenerator_h #define cmVisualStudioTargetGenerator_h #include "cmConfigure.h" // IWYU pragma: keep #include #include #include #include #include #include class cmComputeLinkInformation; class cmCustomCommand; class cmGeneratedFileStream; class cmGeneratorTarget; class cmGlobalVisualStudio10Generator; class cmLocalVisualStudio10Generator; class cmMakefile; class cmSourceFile; class cmSourceGroup; class cmVS10GeneratorOptions; class cmVisualStudio10TargetGenerator { public: cmVisualStudio10TargetGenerator(cmGeneratorTarget* target, cmGlobalVisualStudio10Generator* gg); ~cmVisualStudio10TargetGenerator(); cmVisualStudio10TargetGenerator(cmVisualStudio10TargetGenerator const&) = delete; cmVisualStudio10TargetGenerator& operator=( cmVisualStudio10TargetGenerator const&) = delete; void Generate(); private: struct ToolSource { cmSourceFile const* SourceFile; bool RelativePath; }; struct ToolSources : public std::vector { }; struct TargetsFileAndConfigs { std::string File; std::vector Configs; }; struct Elem; struct OptionsHelper; std::string ConvertPath(std::string const& path, bool forceRelative); std::string CalcCondition(const std::string& config) const; void WriteProjectConfigurations(Elem& e0); void WriteProjectConfigurationValues(Elem& e0); void WriteMSToolConfigurationValues(Elem& e1, std::string const& config); void WriteCEDebugProjectConfigurationValues(Elem& e0); void WriteMSToolConfigurationValuesManaged(Elem& e1, std::string const& config); void WriteHeaderSource(Elem& e1, cmSourceFile const* sf); void WriteExtraSource(Elem& e1, cmSourceFile const* sf); void WriteNsightTegraConfigurationValues(Elem& e1, std::string const& config); void WriteSource(Elem& e2, cmSourceFile const* sf); void WriteExcludeFromBuild(Elem& e2, std::vector const& exclude_configs); void WriteAllSources(Elem& e0); void WritePackageReferences(Elem& e0); void WritePackageReference(Elem& e1, std::string const& ref, std::string const& version); void WriteDotNetReferences(Elem& e0); void WriteDotNetReference(Elem& e1, std::string const& ref, std::string const& hint, std::string const& config); void WriteImports(Elem& e0); void WriteDotNetReferenceCustomTags(Elem& e2, std::string const& ref); void WriteEmbeddedResourceGroup(Elem& e0); void WriteWinRTReferences(Elem& e0); void WriteWinRTPackageCertificateKeyFile(Elem& e0); void WriteXamlFilesGroup(Elem& e0); void WritePathAndIncrementalLinkOptions(Elem& e0); void WriteItemDefinitionGroups(Elem& e0); void VerifyNecessaryFiles(); void WriteMissingFiles(Elem& e1); void WriteMissingFilesWP80(Elem& e1); void WriteMissingFilesWP81(Elem& e1); void WriteMissingFilesWS80(Elem& e1); void WriteMissingFilesWS81(Elem& e1); void WriteMissingFilesWS10_0(Elem& e1); void WritePlatformExtensions(Elem& e1); void WriteSinglePlatformExtension(Elem& e1, std::string const& extension, std::string const& version); void WriteSDKReferences(Elem& e0); void WriteSingleSDKReference(Elem& e1, std::string const& extension, std::string const& version); void WriteCommonMissingFiles(Elem& e1, const std::string& manifestFile); void WriteTargetSpecificReferences(Elem& e0); void WriteTargetsFileReferences(Elem& e1); std::vector GetIncludes(std::string const& config, std::string const& lang) const; bool ComputeClOptions(); bool ComputeClOptions(std::string const& configName); void WriteClOptions(Elem& e1, std::string const& config); bool ComputeRcOptions(); bool ComputeRcOptions(std::string const& config); void WriteRCOptions(Elem& e1, std::string const& config); bool ComputeCudaOptions(); bool ComputeCudaOptions(std::string const& config); void WriteCudaOptions(Elem& e1, std::string const& config); bool ComputeCudaLinkOptions(); bool ComputeCudaLinkOptions(std::string const& config); void WriteCudaLinkOptions(Elem& e1, std::string const& config); bool ComputeMasmOptions(); bool ComputeMasmOptions(std::string const& config); void WriteMasmOptions(Elem& e1, std::string const& config); bool ComputeNasmOptions(); bool ComputeNasmOptions(std::string const& config); void WriteNasmOptions(Elem& e1, std::string const& config); bool ComputeLinkOptions(); bool ComputeLinkOptions(std::string const& config); bool ComputeLibOptions(); bool ComputeLibOptions(std::string const& config); void WriteLinkOptions(Elem& e1, std::string const& config); void WriteMidlOptions(Elem& e1, std::string const& config); void WriteAntBuildOptions(Elem& e1, std::string const& config); void OutputLinkIncremental(Elem& e1, std::string const& configName); void WriteCustomRule(Elem& e0, cmSourceFile const* source, cmCustomCommand const& command); void WriteCustomRuleCpp(Elem& e2, std::string const& config, std::string const& script, std::string const& additional_inputs, std::string const& outputs, std::string const& comment); void WriteCustomRuleCSharp(Elem& e0, std::string const& config, std::string const& commandName, std::string const& script, std::string const& inputs, std::string const& outputs, std::string const& comment); void WriteCustomCommands(Elem& e0); void WriteCustomCommand(Elem& e0, cmSourceFile const* sf); void WriteGroups(); void WriteProjectReferences(Elem& e0); void WriteApplicationTypeSettings(Elem& e1); void OutputSourceSpecificFlags(Elem& e2, cmSourceFile const* source); void AddLibraries(const cmComputeLinkInformation& cli, std::vector& libVec, std::vector& vsTargetVec, const std::string& config); void AddTargetsFileAndConfigPair(std::string const& targetsFile, std::string const& config); void WriteLibOptions(Elem& e1, std::string const& config); void WriteManifestOptions(Elem& e1, std::string const& config); void WriteEvents(Elem& e1, std::string const& configName); void WriteEvent(Elem& e1, const char* name, std::vector const& commands, std::string const& configName); void WriteGroupSources(Elem& e0, std::string const& name, ToolSources const& sources, std::vector&); void AddMissingSourceGroups(std::set& groupsUsed, const std::vector& allGroups); bool IsResxHeader(const std::string& headerFile); bool IsXamlHeader(const std::string& headerFile); bool IsXamlSource(const std::string& headerFile); bool ForceOld(const std::string& source) const; void GetCSharpSourceProperties(cmSourceFile const* sf, std::map& tags); void WriteCSharpSourceProperties( Elem& e2, const std::map& tags); void GetCSharpSourceLink(cmSourceFile const* sf, std::string& link); private: friend class cmVS10GeneratorOptions; using Options = cmVS10GeneratorOptions; using OptionsMap = std::map>; OptionsMap ClOptions; OptionsMap RcOptions; OptionsMap CudaOptions; OptionsMap CudaLinkOptions; OptionsMap MasmOptions; OptionsMap NasmOptions; OptionsMap LinkOptions; std::string LangForClCompile; enum VsProjectType { vcxproj, csproj } ProjectType; bool InSourceBuild; std::vector Configurations; std::vector TargetsFileAndConfigsVec; cmGeneratorTarget* const GeneratorTarget; cmMakefile* const Makefile; std::string const Platform; std::string const Name; std::string const GUID; bool MSTools; bool Managed; bool NsightTegra; unsigned int NsightTegraVersion[4]; bool TargetCompileAsWinRT; std::set IPOEnabledConfigurations; std::map SpectreMitigation; cmGlobalVisualStudio10Generator* const GlobalGenerator; cmLocalVisualStudio10Generator* const LocalGenerator; std::set CSharpCustomCommandNames; bool IsMissingFiles; std::vector AddedFiles; std::string DefaultArtifactDir; bool AddedDefaultCertificate = false; // managed C++/C# relevant members using DotNetHintReference = std::pair; using DotNetHintReferenceList = std::vector; using DotNetHintReferenceMap = std::map; DotNetHintReferenceMap DotNetHintReferences; using UsingDirectories = std::set; using UsingDirectoriesMap = std::map; UsingDirectoriesMap AdditionalUsingDirectories; using ToolSourceMap = std::map; ToolSourceMap Tools; std::string GetCMakeFilePath(const char* name) const; }; #endif