Imported Upstream version 3.25.0
[platform/upstream/cmake.git] / Source / cmLinkLineDeviceComputer.h
1 /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
2    file Copyright.txt or https://cmake.org/licensing for details.  */
3
4 #pragma once
5
6 #include "cmConfigure.h" // IWYU pragma: keep
7
8 #include <string>
9 #include <vector>
10
11 #include "cmLinkLineComputer.h"
12
13 class cmComputeLinkInformation;
14 class cmGeneratorTarget;
15 class cmLocalGenerator;
16 class cmOutputConverter;
17 class cmStateDirectory;
18 template <typename T>
19 class BT;
20
21 class cmLinkLineDeviceComputer : public cmLinkLineComputer
22 {
23 public:
24   cmLinkLineDeviceComputer(cmOutputConverter* outputConverter,
25                            cmStateDirectory const& stateDir);
26   ~cmLinkLineDeviceComputer() override;
27
28   cmLinkLineDeviceComputer(cmLinkLineDeviceComputer const&) = delete;
29   cmLinkLineDeviceComputer& operator=(cmLinkLineDeviceComputer const&) =
30     delete;
31
32   bool ComputeRequiresDeviceLinking(cmComputeLinkInformation& cli);
33   bool ComputeRequiresDeviceLinkingIPOFlag(cmComputeLinkInformation& cli);
34
35   void ComputeLinkLibraries(
36     cmComputeLinkInformation& cli, std::string const& stdLibString,
37     std::vector<BT<std::string>>& linkLibraries) override;
38
39   std::string GetLinkerLanguage(cmGeneratorTarget* target,
40                                 std::string const& config) override;
41 };
42
43 bool requireDeviceLinking(cmGeneratorTarget& target, cmLocalGenerator& lg,
44                           const std::string& config);