diff -r 000000000000 -r f0f2b8682603 memana/analyzetoolclient/commandlineengine/internal/inc/CATProject.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/memana/analyzetoolclient/commandlineengine/internal/inc/CATProject.h Thu Feb 11 15:51:35 2010 +0200 @@ -0,0 +1,626 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Class representing a project. +* +*/ + + +#ifndef __CATPROJECT_H__ +#define __CATPROJECT_H__ + +#include "ATCommonDefines.h" +#include "CATBase.h" + +class CATModule2; +class CATDatParser; + +// Raptor cmd and makefile constants used +#define RAPTOR_CMD_BASE "sbs -b bld.inf --makefile=atool_temp/build/make_build --config=" +#define RAPTOR_MAKEFILE "atool_temp\\build\\make_build.default" +#define RAPTOR_MAKEFILE_LOG " --logfile=atool_temp\\build\\makefile.xml" +#define RAPTOR_BUILD_LOG " --logfile=atool_temp\\build\\build.xml" +#define RAPTOR_REALLYCLEAN_LOG " --logfile=atool_temp\\build\\reallyclean.xml" +#define RAPTOR_BUILD_LOG_NAME "atool_temp\\build\\build.xml" +#define RAPTOR_LISTING_LOG " --logfile=atool_temp\\build\\listing.xml" + +#define RAPTOR_NOBUILD_SWITCH " --nobuild" +#define RAPTOR_MAKEFILE_SWITCH "--makefile=atool_temp/build/make_build" + + +// Raptor makefile constant variable names +#define RAPTOR_PROJECT_META "PROJECT_META:=" +#define RAPTOR_SOURCE "SOURCE:=" +#define RAPTOR_TARGET "TARGET:=" +#define RAPTOR_TARGETYPE "TARGETTYPE:=" +#define RAPTOR_REQUESTEDTARGETEXT "REQUESTEDTARGETEXT:=" +#define RAPTOR_VARIANTPLATFORM "VARIANTPLATFORM:=" +#define RAPTOR_VARIANTTYPE "VARIANTTYPE:=" +#define RAPTOR_FEATUREVARIANT "FEATUREVARIANT:=" +#define RAPTOR_FEATUREVARIANTNAME "FEATUREVARIANTNAME:=" +#define RAPTOR_RELEASEPATH "RELEASEPATH:=" +#define RAPTOR_FULLVARIANTPATH "FULLVARIANTPATH:=" +#define RAPTOR_COMPILE_DEFINITIONS "CDEFS:=" + +// Sbs v.1 makefile constants. +#define MAKEFILE_SEARCH_STRING "@perl -S checksource.pl" +#define MMPFILE_SEARCH_STRING "PRJ_MMPFILES MMP" +#define SOURCE_PATH "SOURCEPATH"; +#define SOURCE_STRING "SOURCE"; +#define TARGET_STRING "TARGET"; + +/** +* CATProject represents a project (collection of modules). +* It has to be set mode in which it operates like +* compile / analyze and necessary parameters for that. +* Then call Run method which also returs error codes +* defined in AT_ERROR_CODES enumeration. +* @author +*/ +class CATProject : public CATBase +{ +public: + + /** + * Enumeration representing used build systems + */ + enum BUILD_SYSTEM { + SBS_V1 = 1, + SBS_V2 = 2 + }; + + /** + * Enumeration representing the mode project is run. + */ + enum PROJECT_MODE { + COMPILE = 0, + INSTRUMENT = 1, + UNINSTRUMENT = 2, + UNINSTRUMENT_FAILED =3, + FAILED = 4, + CLEAN = 5, + ANALYZE = 6, + INSTRUMENT_CONSOLE = 7, + UNINSTRUMENT_CONSOLE = 8, + FAILED_CONSOLE = 9, + NOT_DEFINED = 10 + }; + + /** + * Enumeration repserenting the logging mode. + */ + enum LOGGING_MODE { + DEFAULT = 0, + S60 = 1, + XTI = 2, + XTI_FAST = 3 + }; + + /** + * Enumeration representing build type. + */ + enum BUILD_TYPE { + UREL = 0, + UDEB = 1 + }; + +public: + + /** + * Constructor + */ + CATProject(); + + /** + * Destructor + */ + ~CATProject(); + + /** + * Set arguments. + * @param arguments. + * @return true if arguments ok. + */ + bool SetArguments( ARGUMENTS& arguments ); + + /** + * Set build system to be used with project. + * See BUILD_SYSTEM enumeration for available systems. + * @param eSystem system. + */ + void SetBuildSystem( BUILD_SYSTEM eSystem ); + + /** + * Set mode which to run. + * See PROJECT_MODE enumeration for available modes. + * @param eMode mode. + */ + void SetMode(PROJECT_MODE eMode); + + /** + * Get project mode. + * @return mode of project. + */ + int GetMode() const; + + /** + * Set epocroot. + * @param sEpocroot + */ + void SetEpocRoot( const string& sEpocRoot ); + + /** + * Set project platform. + * @param sPlatform platform. + */ + void SetPlatform( const string& sPlatform ); + + /** + * Set variant. + * @sVariant variant. + */ + void SetVariant( const string& sVariant ); + + /** + * Set logging mode. See LOGGING_MODE enumeration for available modes. + * @param eLogginMode logging mode. + */ + void SetLoggingMode( LOGGING_MODE eLoggingMode); + + /** + * Set build type. See BUILD_TYPE enumeration for available types. + * @param eType build type. + */ + void SetBuildType( BUILD_TYPE eType ); + + /** + * Set S60 logging filename. + * @param sFileName filename. + */ + void SetS60FileName( const string& sFileName); + + /** + * Set target module. + * @param sTargetModule target module name. + */ + void SetTargetModule( const string& sTargetModule ); + + /** + * Set multiple target modules used in project. + * @param vTargetModules target module names. + */ + void SetTargetModules( const vector& vTargetModules ); + + /** + * Set Binary target name to create analysis results to. + * @param sBinaryTarget binary target name. + */ + void SetBinaryTarget( const string& sBinaryTarget ); + + /** + * Set data file to analyze. + * @param sDataFile datafile. + */ + void SetDataFile( const string& sDataFile ); + + /** + * Set rom symbol file(s) used in analyze. + * @param sRomSymbolFile. + */ + void SetRomSymbolFiles(const vector& vRomSymbolFiles); + + /** + * Set the logging level of analysis report. + * @param iLogLevel log level. + */ + void SetLogLevel( int iLogLevel ); + + /** + * Set the size of allocation call stack to be written in temporary cpp. + * @param iAllocCallStackSize + */ + void SetAllocCallStackSize( int iAllocCallStackSize ); + + /** + * Set the size of free call stack to be written in temporary cpp. + * @param iFreeCallStackSize + */ + void SetFreeCallStackSize( int iFreeCallStackSize ); + + /** + * Set the output file name to store analyse report. + * @param sDataFileOutput data file name. + */ + void SetDataFileOutput( const string& sDataFileOutput ); + + /** + * Set build command used in compile phase. + * @param sBuildCommand build command. + */ + void SetBuildCommand( const string& sBuildCommand ); + + /** + * Run the set mode. + * @return error code. + */ + int Run(); + + /** + * Run recovery, used when "instatly" need to recover modules and exit. + */ + int RunRecoveryAndExit(); + + /** + * Get build type string. + * @param eType type from which to get correponding string. + * @return types corresponding string. + */ + static string GetBuildTypeString( int eType ); + + /** + * Reads projects configuration file if it exists. + * @return false in case the data contains information that project is uninstrumented. Otherwise returns always true. + */ + bool IsUninstrumented(); + +#ifndef MODULE_TEST +private: +#endif + /** + * Run compiling in console. + * @return error code. + */ + int RunCompile( void ); + + /** + * Run cleaning project. + * @return error code. + */ + int RunClean( void ); + + /** + * Run running analyze. + * @return error code. + */ + int RunAnalyze( void ); + + /** + * Run instrumenting of project for Carbide extension (pre-build). + * @return error code. + */ + int RunInstrument( void ); + + /** + * Run uninstrumenting of project for Carbide extension (post-build). + * @return error code. + */ + int RunUninstrument( void ); + + /** + * Run uninstrumenting of project for Carbide extension(post-build), when build failed. + * @return error code. + */ + int RunUninstrumentFailed( void ); + + /** + * Run console instrumenting. + * @return error code. + */ + int RunInstrumentConsole( void ); + + /** + * Run Console uninstrumenting. + * @return error code. + */ + int RunUninstrumentConsole( void ); + + /** + * Run console uninstrumenting, when build failed. + * @return error code. + */ + int RunFailedConsole( void ); + + /** + * Show summary of compilation. + */ + void DisplayCompileSummary( void ); + + /** + * Show summary, build target, build type, logging mode... + */ + void DisplayBuildSummary( void ); + + /** + * Create make files. + * @return true if successful + */ + bool CreateMakeFile( void ); + /** + * Create SBS v.1 make files. + * @return true if successful. + */ + bool CreateMakeFileSbs1( void ); + /** + * Copy sbs1 makefile to temporary folder. + * @return true if successful. + */ + bool CopyMakeFileSbs1ToTemporaryFolder( void ); + /** + * Run really clean in SBS v.1. + * @return true if successful. + */ + bool RunReallyCleanSbs1( void ); + /** + * Run really clean in SBS v.2. + * @return true if successful. + */ + bool RunReallyCleanSbs2( void ); + /** + * Run export in SBS v.1. + * @return true if successful. + */ + bool RunExportSbs1( void ); + /** + * Create make files (level2) SBS v.1. + * @return true if successful. + */ + bool CreateMakeFileSbs1Level2( void ); + /** + * Create makefile SBS v.2. + * @return true if successful. + */ + bool CreateMakeFileSbs2( void ); + /** + * Read makefile. + * @return true if successful. + */ + bool ReadMakeFile( void ); + /** + * Read SBS v.1 makefile. + * @return true if successful. + */ + bool ReadMakeFileSbs1( void ); + /** + * Read SBS v.1 makefile (Level1). + * @return true if successful. + */ + bool ReadMakeFileSbs1Level1( void ); + /** + * Read SBS v.2 makefiles. + * @return true if successful. + */ + bool ReadMakeFileSbs2( void ); + /** + * Read specified SBS v.2 makefile. + * @param sMakeFile makefile to be read. + * @return true if succesful. + */ + bool ReadMakeFileSbs2( string& sMakeFile ); + + /** + * Filter unsupported and static libraries to their own vectors. + * Unsupported include kernel types, modules with kernel mode compile definition. + * @return true if successful. + */ + bool FilterModules(); + + /** + * Creates temporary directories for all modules + * in member vector. + * @return true if successful. + */ + bool CreateTemporaryDirectories(); + + /** + * Creates tempororary cpp files for all modules + * in member vector. + * @return true if successful. + */ + bool CreateTemporaryCpps(); + + /** + * Hooks all modules in member vector + * (modifies mmp files) + * @return true if successful + */ + bool ModifyModules( void ); + + /** + * Unhooks all modules in member vector + * (removes changes from mmp files) + * @return true if successful + */ + bool RestoreModules( void ); + + /** + * Verifys that member vectors modules + * mmp files unchanged. Restores if they are + * from backup or from original. + * @return true if successful + */ + bool VerifyAndRecoverModules( void ); + + /** + * Runs compilation. + * @return true if successful. + */ + bool Compile( void ); + /** + * @return true if successful. + */ + bool CompileSbs1( void ); + /** + * @return true if successful. + */ + bool CompileSbs2( void ); + + /** + * Runs listing creatation. + * @return true if successful + */ + bool CreateListings( void ); + /** + * @return true if successful. + */ + bool CreateListingsSbs1( void ); + /** + * @return true if successful. + */ + bool CreateListingsSbs2( void ); + /** + * Copies releasables of modules including lst & map files + * for all modules in project to their temporary directories. + * @return true if successful. + */ + bool CopyReleasables( void ); + /** + * Deletes all atool_temp directories + * of member vector modules. + * @return true if successful. + */ + bool DeleteTemporaryDirs( void ); + /** + * Deletes files from atool_temp directory + * of member vector modules which extension not defined + * in TEMP_EXTENSION_NO_DELETE table. + * @return true if successful. + */ + bool CleanTemporaryDirs( void ); + /** + * Writes class attributes to a file + * under atool_temp directory. + * @return true if successful. + */ + bool WriteAttributes( void ) const; + /** + * Read class attributes from a file + * under atool_temp directory. + * @return true if successful. + */ + bool ReadAttributes( void ); + + /** + * Creates atool_temp directory if it does not + * exist in current directory. + * @return true if successful. + */ + bool MakeTempDirIfNotExist( void ); + +#ifndef MODULE_TEST +private: +#endif + + /** + * Clean all module vectors. + */ + void CleanModuleVectors(); + + /** + * Get build type as string. + * @return buildtype string. + */ + string GetBuildTypeString(); + + /** + * Helper function to add target module(s) + * if any defined in class to given sbs command. + * @param sCmd command to add modules to. + */ + void AddTargetModuleIfDefined(string& sCmd); + + /** + * Run given system/abld command to all defined target modules in vector. + * Space char (if its missing) will be added to given command + one target + * module at a time. + * @param sCommand sCommand to run. + * @return true if none system call sets error level other than 0. + */ + bool RunAbldCommandToAllTargets( const string& sCommand ); + + /** + * Check is target module in project. + * If no modules / targets defined return value is true. + * @return true if target module is in project. + */ + bool IsTargetModuleInProject( void ) const; + + /** + * Initializes member make file variable with correct full path to point (epoc32/build)... + * @return true if successful. + */ + bool InitSbs1MakeFileWithPath(); + + /** + * Initializes member make file variable with correct full path to (atoo_temp...) + * @return true if successful. + */ + bool InitSbs1MakeFileWithPathToTemp(); + +#ifndef MODULE_TEST +private: +#endif + // System current directory. + char m_cCurrentDir[ MAX_LINE_LENGTH ]; + // Projects build system + int m_eBuildSystem; + // Project modules. + vector m_vModules; + // Static libraries. + vector m_vStaticLibraries; + // Unsupported project modules. + vector m_vUnsupportedModules; + // Run mode. + int m_eMode; + // Logging level (used in analyse). + int m_iLoggingLevel; + // Is project unsinstrumented. + bool m_bUninstrumented; + // Build command. + string m_sBuildCommand; + // Epocroot + string m_sEpocRoot; + // Platform i.e. armv5. + string m_sPlatform; + // SBS2 variant. + string m_sVariant; + // Logging mode (used in compile,instrumenting). + int m_eLoggingMode; + // Allocation call stack size + int m_iAllocCallStackSize; + // Free call stack size + int m_iFreeCallStackSize; + // Build type udeb / urel. + int m_eBuildType; + // Sbs v.1 level 1 make file + string m_sMakeFile; + // User given S60 log file name. + string m_sS60FileName; + // Target module. + string m_sTargetModule; + // Target modules (used in carbide instrumenting). + vector m_vTargetModules; + // Binary target (used in analyse). + string m_sBinaryTarget; + // User given datafile to analyse. + string m_sDataFile; + // + vector m_vRomSymbolFiles; + // Temporary data file name if user gave trace file. + string m_sDataFileTemp; + // User given output file to store analyse results. + string m_sDataFileOutput; + // Analyser object. + CATDatParser* m_pAnalyzer; +}; +#endif +// End of file