Difference between revisions of "AMBuild API (2.0)"

From AlliedModders Wiki
Jump to: navigation, search
m
m
Line 4: Line 4:
 
* '''Compiler''': An abstraction representing a C++ compiler environment.
 
* '''Compiler''': An abstraction representing a C++ compiler environment.
 
* '''Vendor''': An abstraction representing a C++ compiler vendor (GCC, MSVC, Clang, etc).
 
* '''Vendor''': An abstraction representing a C++ compiler vendor (GCC, MSVC, Clang, etc).
 +
* '''BinaryBuilder''': An abstraction for building C++ compilation jobs.
  
 
As a general rule, AMBuild uses the following conventions:
 
As a general rule, AMBuild uses the following conventions:
Line 29: Line 30:
 
* ''DetectCompilers()'' - Detects C and C++ compilers and raises an exception if neither are available or they do not match. Should only be called once.
 
* ''DetectCompilers()'' - Detects C and C++ compilers and raises an exception if neither are available or they do not match. Should only be called once.
 
** Returns a <tt>Compiler</tt> object that is also accessible via the <tt>compiler</tt> attribute.
 
** Returns a <tt>Compiler</tt> object that is also accessible via the <tt>compiler</tt> attribute.
 +
* ''RunBuildScripts(files, vars={})'' - Runs additional build scripts.
 +
** ''files'' - An iterable containing a list of file paths relative to path of the current build script, or a string containing such a path.
 +
** ''vars'' - An optional dictionary of global variables to set in each child build script. The dictionary is merged with global variables passed into our current script.
 +
** Returns <tt>None</tt>.

Revision as of 18:25, 17 October 2013

AMBuild scripts have access to the following object types:

  • Context: Exposed as the builder, this is the entry point for the API and is known as a configure context.
  • NodeBuilder: Represents a node in the dependency graph that may or may not be committed to the database.
  • Compiler: An abstraction representing a C++ compiler environment.
  • Vendor: An abstraction representing a C++ compiler vendor (GCC, MSVC, Clang, etc).
  • BinaryBuilder: An abstraction for building C++ compilation jobs.

As a general rule, AMBuild uses the following conventions:

  • Methods starting with an upper-case letter are considered public API.
  • Methods starting with a lower-case letter are considered private and should not be used.
  • Properties and attributes ending with an underscore are considered private and should not be used.
  • Spaces are used instead of tabs, and two-space indents are preferred.

Contexts

Contexts are implemented in ambuild2/frontend/base_gen.py. They are the entry point for using AMBuild. They have the following properties:

  • compiler - An instance of a Compiler object, or None if DetectCompilers</t> was never called. Calling DetectCompilers will set the compiler field for this and all future contexts.
  • parent - The context that loaded the current context.
  • script - The path, relative to sourcePath, of the current build script.
  • sourcePath - The absolute path to the source tree.
  • options - The result of evaluating command-line options from configure.py, via the optparse module.
  • buildPath - The absolute path to the build folder.
  • buildFolder - The working directory of jobs in this context, relative to buildPath.

Methods:

  • SetBuildFolder(folder) - Sets the working directory of jobs in this context, relative to buildPath.
    • folder - A string representing the folder path. '.' and './' are allowed.
    • Returns None.
  • DetectCompilers() - Detects C and C++ compilers and raises an exception if neither are available or they do not match. Should only be called once.
    • Returns a Compiler object that is also accessible via the compiler attribute.
  • RunBuildScripts(files, vars={}) - Runs additional build scripts.
    • files - An iterable containing a list of file paths relative to path of the current build script, or a string containing such a path.
    • vars - An optional dictionary of global variables to set in each child build script. The dictionary is merged with global variables passed into our current script.
    • Returns None.