2005/5/10

     
 

ACDK Make concepts

artefaktur

Description of the internal concepts of acdkmake.



Content of this chapter:

   Props hierarchy
   General C++ Task
   Tasks and Tools
     Tool-Classes
     Selection, Input
     ToolOutputFilter



 Props hierarchy

Root
  [Enviromnent]
  <- acdkmake globals
    <- build props (passed to Task.execute())
      <- Target specific Props (held by Task)

 General C++ Task

  • Build options
    • Load other configuration .csf before starting build.csf.
    • Use generated project files (f.e. msdev.exe) instead of own builder
    • Plugin for eclipse
  • Compile options
  • Support for compiling c Sources.
    • optional use libtool to compile
    • C++ options for rtti, exception support
    • console/windows options
    • Support for static libraries
    • Support for mingw.
    • support for ressource compiler (vc, borland)
    • flag for threaded applications (set compiler and linker settings)
    • Parser for compiler to unify compiler output (warnings, errors).
  • Generation options
    • Build make and project files

 Tasks and Tools

  • Tool
    • Class (like CCompiler)
    • Tribe (like vc6, posix-gnuc, dos, unix)

 Tool-Classes

Tools are identified by ToolClass (CCompiler) and ToolTribe.

  • FileTranslater. Has Input and Output files and additionally log output
  • CCompiler (FileTranslater): compiles .c -> .o/.obj
  • CCCompiler (FileTranslater): compiles .c -> .o/.obj
  • JavaCompiler (FileTranslater): JC_
  • Linker (FileTranslater): CCC_
  • Builder uses tools like amake, make, devenv, ant
  • ExeBuilder, LibBuilder, StaticLibBuilder, SharedLibBuilder:
    Can use Compiler/Linker or make/project files
  • ProjectGenerator, ProjectGroupGenerator, ProjectTargetGenerator
  • VersionControl
  • Shell
  • FileCopy, FileMove, FileRemove, FileMakeDir
  • Install
  • acdkmc
  • ResourceCompiler

ProjectBuilder:

  CppExeBuilder: SharedLibBuilder
    FileDependTask
    CCCompiler
    LINKER(EXE)  
  CppSharedLibBuilder
      CCCompiler
      Linker(SHARED)
  
ProjectBuilder:
  CppExeBuilder:
    make -f xxx target


// pseudo code
  
class Tool extends Task
{
  String getToolClass();
  String getToolTribe();
  
  Tool initTool(Props props);
  static Tool getTool(String toolClass, String toolTribe = Nil);
}

class FileTranslater extends Tool
{
  bool translates(String fileExt);
  String translatesTo(String file);
}


RCCompiler cc = (RCCompiler)Tools::getTool("CCompiler");
RCCompiler cc = (RCCompiler)Tools::getTool("CCompiler", "vc");


Props p = new Props(

 Selection, Input

If more than one or none ToolTribe was found, may interact with user to select the tool.

 ToolOutputFilter

The ToolOutputFilter filters the output of