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