1/* Compiler handling for plugin
2   Copyright (C) 2014-2022 Free Software Foundation, Inc.
3
4This file is part of GCC.
5
6GCC is free software; you can redistribute it and/or modify it under
7the terms of the GNU General Public License as published by the Free
8Software Foundation; either version 3, or (at your option) any later
9version.
10
11GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12WARRANTY; without even the implied warranty of MERCHANTABILITY or
13FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14for more details.
15
16You should have received a copy of the GNU General Public License
17along with GCC; see the file COPYING3.  If not see
18<http://www.gnu.org/licenses/>.  */
19
20#ifndef CC1_PLUGIN_COMPILER_HH
21#define CC1_PLUGIN_COMPILER_HH
22
23namespace cc1_plugin
24{
25
26  // Base class for compiler.
27  class compiler
28  {
29  public:
30    explicit compiler (bool v)
31      : verbose (v)
32    {
33    }
34
35    virtual ~compiler () = default;
36
37    // Find the compiler.  BASE is the base name of the compiler, see
38    // compiler-name.hh.  This sets COMPILER to the resulting path.
39    // Returns nullptr on success, or a malloc'd error string on
40    // failure.
41    virtual char *find (const char *base, std::string &compiler) const;
42
43    void set_verbose (bool v)
44    {
45      verbose = v;
46    }
47
48  protected:
49    bool verbose;
50  };
51
52  /* Compiler to set by set_triplet_regexp.  */
53  class compiler_triplet_regexp : public compiler
54  {
55  private:
56    std::string triplet_regexp_;
57  public:
58
59    char *find (const char *base, std::string &compiler) const override;
60
61    compiler_triplet_regexp (bool v, const char *triplet_regexp)
62      : compiler (v), triplet_regexp_ (triplet_regexp)
63    {
64    }
65  };
66
67  /* Compiler to set by set_driver_filename.  */
68  class compiler_driver_filename : public compiler
69  {
70  private:
71    std::string driver_filename_;
72  public:
73    char *find (const char *base, std::string &compiler) const override;
74
75    compiler_driver_filename (bool v, const char *driver_filename)
76      : compiler (v), driver_filename_ (driver_filename)
77    {
78    }
79  };
80
81}
82
83#endif // CC1_PLUGIN_COMPILER_HH
84