BuildCache
Classes | Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
bcache::program_wrapper_t Class Referenceabstract

The base class for all program wrappers. More...

#include <program_wrapper.hpp>

Inheritance diagram for bcache::program_wrapper_t:
bcache::gcc_wrapper_t bcache::lua_wrapper_t bcache::msvc_wrapper_t bcache::ti_common_wrapper_t bcache::ccc_analyzer_wrapper_t bcache::ghs_wrapper_t bcache::qcc_wrapper_t bcache::clang_cl_wrapper_t bcache::ti_arm_cgt_wrapper_t bcache::ti_arp32_wrapper_t bcache::ti_c6x_wrapper_t

Classes

class  capabilities_t
 A helper class for managing wrapper capabilities. More...
 

Public Member Functions

bool handle_command (int &return_code)
 Try to wrap a program command. More...
 
virtual bool can_handle_command ()=0
 Check if this class implements a wrapper for the given command. More...
 

Protected Member Functions

 program_wrapper_t (const file::exe_path_t &exe_path, const string_list_t &args)
 
virtual void resolve_args ()
 Resolve arguments on the command line. More...
 
virtual string_list_t get_capabilities ()
 Generate a list of supported capabilites. More...
 
virtual std::map< std::string, expected_file_tget_build_files ()
 Get the paths to the files that are to be generated by the command. More...
 
virtual std::string get_program_id ()
 Get a string that uniquely identifies the program. More...
 
virtual string_list_t get_relevant_arguments ()
 Get relevant command line arguments for hashing. More...
 
virtual std::map< std::string, std::string > get_relevant_env_vars ()
 Get relevant environment variables for hashing. More...
 
virtual string_list_t get_input_files ()
 Get the paths to the input files for the command. More...
 
virtual std::string preprocess_source ()
 Generate the preprocessed source text. More...
 
virtual string_list_t get_implicit_input_files ()
 Get a list of paths to implicit input files. More...
 
virtual sys::run_result_t run_for_miss ()
 Run the actual command (when there is a cache miss). More...
 

Protected Attributes

const file::exe_path_tm_exe_path
 
const string_list_tm_args
 
capabilities_t m_active_capabilities
 Active capabilities. More...
 

Private Member Functions

std::string get_program_id_cached ()
 

Private Attributes

cache_t m_cache
 

Detailed Description

The base class for all program wrappers.

Specialized program wrappers inherit from this class and implement the relevant virtual methods that constitute the "wrapper API".

This class also implements the entire program wrapping mechanism, with cache lookups etc.

Member Function Documentation

◆ can_handle_command()

virtual bool bcache::program_wrapper_t::can_handle_command ( )
pure virtual

◆ get_build_files()

std::map< std::string, expected_file_t > bcache::program_wrapper_t::get_build_files ( )
protectedvirtual

Get the paths to the files that are to be generated by the command.

Returns
the files that are expected to be generated by this command.
Exceptions
runtime_errorif the request could not be completed.

Reimplemented in bcache::lua_wrapper_t, bcache::qcc_wrapper_t, bcache::ccc_analyzer_wrapper_t, bcache::msvc_wrapper_t, bcache::gcc_wrapper_t, and bcache::ti_common_wrapper_t.

◆ get_capabilities()

string_list_t bcache::program_wrapper_t::get_capabilities ( )
protectedvirtual

Generate a list of supported capabilites.

The list of capabilites can contain zero or more of the following (case sensitive) strings:

String Meaning
create_target_dirs Request creation of missing output dirs
direct_mode Supports direct mode
hard_links Can use hard links for cached files

In order to support direct mode, get_input_files() and get_implicit_input_files() need to be implemented.

Returns
a list of supported capabilites.
Exceptions
runtime_errorif the request could not be completed.
Note
Capabilites are "opt-in". If this method is not implemented or returns an empty list, all capabilites will be treated as "not supported".

Reimplemented in bcache::lua_wrapper_t, bcache::ghs_wrapper_t, bcache::qcc_wrapper_t, bcache::msvc_wrapper_t, and bcache::gcc_wrapper_t.

◆ get_implicit_input_files()

string_list_t bcache::program_wrapper_t::get_implicit_input_files ( )
protectedvirtual

Get a list of paths to implicit input files.

This method is only used in direct mode, and the main use case is for collecting a list of all include files for C/C++ builds.

Returns
the list of implicit input files.
Exceptions
runtime_errorif the request could not be completed.
Note
The preprocess_source method has been called before calling this method (so the list can be collected during the preprocessing step and later be returned by this method).
Only used in direct mode.

Reimplemented in bcache::lua_wrapper_t, bcache::msvc_wrapper_t, and bcache::gcc_wrapper_t.

◆ get_input_files()

string_list_t bcache::program_wrapper_t::get_input_files ( )
protectedvirtual

Get the paths to the input files for the command.

Returns
the files that are used as primary input.
Exceptions
runtime_errorif the request could not be completed.
Note
Only used in direct mode.

Reimplemented in bcache::lua_wrapper_t, bcache::msvc_wrapper_t, and bcache::gcc_wrapper_t.

◆ get_program_id()

std::string bcache::program_wrapper_t::get_program_id ( )
protectedvirtual

Get a string that uniquely identifies the program.

Returns
a program ID string.
Exceptions
runtime_errorif the request could not be completed.

Reimplemented in bcache::lua_wrapper_t, bcache::ghs_wrapper_t, bcache::qcc_wrapper_t, bcache::msvc_wrapper_t, bcache::gcc_wrapper_t, bcache::clang_cl_wrapper_t, and bcache::ti_common_wrapper_t.

◆ get_relevant_arguments()

string_list_t bcache::program_wrapper_t::get_relevant_arguments ( )
protectedvirtual

Get relevant command line arguments for hashing.

Returns
filtered command line arguments.
Exceptions
runtime_errorif the request could not be completed.
Note
The purpose of this function is to create a list of arguments that is suitable for hashing (i.e. uniquely identifying) the program options. As such, things like absolute file paths and compilation defines should be excluded (since they are resolved in the preprocess step).

Reimplemented in bcache::lua_wrapper_t, bcache::ghs_wrapper_t, bcache::msvc_wrapper_t, bcache::gcc_wrapper_t, and bcache::ti_common_wrapper_t.

◆ get_relevant_env_vars()

std::map< std::string, std::string > bcache::program_wrapper_t::get_relevant_env_vars ( )
protectedvirtual

Get relevant environment variables for hashing.

Returns
relevant environment variables and their values.
Exceptions
runtime_errorif the request could not be completed.
Note
The purpose of this function is to create a list of environment variables that may affect program output.

Reimplemented in bcache::lua_wrapper_t, bcache::ghs_wrapper_t, bcache::qcc_wrapper_t, bcache::msvc_wrapper_t, bcache::gcc_wrapper_t, and bcache::ccc_analyzer_wrapper_t.

◆ handle_command()

bool bcache::program_wrapper_t::handle_command ( int &  return_code)

Try to wrap a program command.

Parameters
[out]return_codeThe command return code (if handled).
Returns
true if the command was recognized and handled.

◆ preprocess_source()

std::string bcache::program_wrapper_t::preprocess_source ( )
protectedvirtual

Generate the preprocessed source text.

Returns
the preprocessed source code file as a string, or an empty string if the operation failed.
Exceptions
runtime_errorif the request could not be completed.

Reimplemented in bcache::lua_wrapper_t, bcache::msvc_wrapper_t, bcache::gcc_wrapper_t, and bcache::ti_common_wrapper_t.

◆ resolve_args()

void bcache::program_wrapper_t::resolve_args ( )
protectedvirtual

Resolve arguments on the command line.

This method is called after can_handle_command, but before calling other methods that rely on the command line arguments. This gives a wrapper the opportunity to resolve special arguments so that they can be properly interpretade by later steps.

The primary use case of this method is to implement support for so called response files, which contain further command line arguments (this is common on Windows to work around the relativlely small command line length limit).

Exceptions
runtime_errorif the request could not be completed.

Reimplemented in bcache::lua_wrapper_t, bcache::gcc_wrapper_t, bcache::msvc_wrapper_t, and bcache::ti_common_wrapper_t.

◆ run_for_miss()

sys::run_result_t bcache::program_wrapper_t::run_for_miss ( )
protectedvirtual

Run the actual command (when there is a cache miss).

Returns
the run result for the child process.

Reimplemented in bcache::lua_wrapper_t, bcache::msvc_wrapper_t, and bcache::ccc_analyzer_wrapper_t.

Member Data Documentation

◆ m_active_capabilities

capabilities_t bcache::program_wrapper_t::m_active_capabilities
protected

Active capabilities.

The capabilities in this object are only active (true) when they are both supported by the wrapper and are active in the user configuration.


The documentation for this class was generated from the following files: