diff -r 000000000000 -r 509e4801c378 srcanamdw/appdep/src/appdep.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/srcanamdw/appdep/src/appdep.cpp Sat Jan 09 10:04:12 2010 +0530 @@ -0,0 +1,278 @@ +/* +* Copyright (c) 2007 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: Main entry of Appdep +* +*/ + + +#include "appdep.hpp" + +// init globals +bool _cl_use_gcc = false; +bool _cl_use_gcce = false; +bool _cl_use_rvct = false; +bool _cl_generate_clean_cache = false; +bool _cl_update_cache = false; +bool _cl_use_libs = false; +bool _cl_show_ordinals = false; +bool _cl_use_udeb = false; +bool _cl_print_debug = false; +bool _some_cache_needs_update = false; + +string _cl_toolsdir = ""; +string _cl_cachedir = ""; +string _cl_releasedir = ""; +string _cl_targets = ""; +string _cl_cfiltloc = ""; +string _cl_outputfile = ""; +string _cl_configfile = ""; +string _cl_sisfiles = ""; +string _cl_usestaticdepstxt = ""; +string _cl_properties = ""; +string _cl_staticdeps = ""; +string _cl_dependson = ""; +string _cl_showfunctions = ""; +string _cl_usesfunction = ""; + +string _gcc_nm_location = ""; +string _gcce_nm_location = ""; +string _gcce_readelf_location = ""; +string _gcce_cfilt_location = ""; +string _rvct_armar_location = ""; +string _rvct_fromelf_location = ""; +string _rvct_cfilt_location = ""; +string _petran_location = ""; +string _dumpsis_location = ""; +string _tempfile_location = ""; +string _target_mode = ""; + +vector _targets; +vector _all_binary_infos; +vector _all_import_library_infos; +vector _changed_import_libraries; +vector _sisfiles; + +unsigned int _current_progress = 0; +unsigned int _current_progress_percentage = 0; +unsigned int _max_progress = 0; + +ofstream _outputf; + +int _CRT_glob = 0; // globbing not supported + +// ---------------------------------------------------------------------------------------------------------- + +int main(int argc, char* argv[]) +{ + // parse command line arguments + ParseCommandLineParameters(argc, argv); + + // read from StaticDependencies.txt if in use + if (!_cl_usestaticdepstxt.empty()) + { + GetDataFromStaticDependenciesTxt(); + } + + // otherwise do normal cache operations + else + { + // first do some checks + DoInitialChecksAndPreparations(); + ParseTargets(); + + // checks for sis files if in use + if (!_cl_sisfiles.empty()) + DoInitialChecksAndPreparationsForSisFiles(); + + // try to read data from caches + if (!_cl_generate_clean_cache) + { + for (unsigned int i=0; i<_targets.size(); i++) // loop each target + { + if (_targets.at(i).cache_files_valid) + { + ReadDataFromSymbolTablesCache(_targets.at(i)); + + if (_targets.at(i).cache_files_valid) + ReadDataFromDependenciesCache(_targets.at(i)); + else + _some_cache_needs_update = true; + } + else + { + _some_cache_needs_update = true; + } + } + } + } + + // check if cache needs generation or update + if (_cl_generate_clean_cache || _cl_update_cache || _some_cache_needs_update) + { + // before starting generating cache, we need more checks that user given params are correct + DoCacheGenerationChecksAndPreparations(); + + + if (_cl_generate_clean_cache) + cerr << "Generating cache files at " << _cl_cachedir << " "; + else + cerr << "Updating cache files at " << _cl_cachedir << " "; + + + // get lists of files from the directories + FindImportLibrariesAndBinariesFromReleases(); + + + // init progress values + if (_max_progress == 0) + _max_progress = 1; + + if (_cl_print_debug) + cerr << endl; + else + ShowProgressInfo(_current_progress_percentage, _current_progress, _max_progress, true); + + + // get import libaries of each target and then write that data to the caches + for (unsigned int i=0; i<_targets.size(); i++) // loop each target + { + GetDataFromImportTables(_targets.at(i)); + + // write data only if current file is not valid + if (!_targets.at(i).cache_files_valid) + { + WriteDataToSymbolTableCacheFile(_targets.at(i)); + } + + // append all data to common vector + for (unsigned int j=0; j<_targets.at(i).import_libraries.size(); j++) // loop all binaries in one target + { + _all_import_library_infos.push_back(_targets.at(i).import_libraries.at(j)); + } + + // clear the original vector to save RAM since it is not needed anymore + _targets.at(i).import_libraries.clear(); + } + + // get dependency data and write it to the cache files + for (unsigned int i=0; i<_targets.size(); i++) // loop each target + { + GetDataFromBinaries(_targets.at(i)); + + if (!_targets.at(i).cache_files_valid) // only write cache if it needs updating + { + WriteDataToDependenciesCacheFile(_targets.at(i)); + } + + } + + cerr << endl; + } + + // if sis files in use and not done any previous operations, some things must be done + else if (!_cl_sisfiles.empty()) + { + // check Petran can be found + SetAndCheckPetranPath(); + + for (unsigned int i=0; i<_targets.size(); i++) // loop each target + { + // append all data to common vector + for (unsigned int j=0; j<_targets.at(i).import_libraries.size(); j++) // loop all import libraries in one target + { + // get a binary info data + _all_import_library_infos.push_back(_targets.at(i).import_libraries.at(j)); + } + + // clear the original vector to save RAM since it is not needed anymore + _targets.at(i).import_libraries.clear(); + } + } + + + // include sis files to analysis if in use + if (!_cl_sisfiles.empty()) + AnalyseSisFiles(); + + + // do the analysis + if (_cl_properties.empty() && _cl_staticdeps.empty() && _cl_dependson.empty() && _cl_showfunctions.empty() && _cl_usesfunction.empty()) + { + cerr << "Nothing to do." << endl; + } + else + { + // copy binary_info vectors to a single one + if (_cl_usestaticdepstxt.empty()) + { + for (unsigned int i=0; i<_targets.size(); i++) // loop all targets + { + for (unsigned int j=0; j<_targets.at(i).binaries.size(); j++) // loop all binaries in one target + { + // get a binary info data + _all_binary_infos.push_back(_targets.at(i).binaries.at(j)); + } + + // clear the original vector to save RAM + _targets.at(i).binaries.clear(); + } + } + + if (!_cl_properties.empty()) + { + // show properties of the binary file + DisplayProperties(_cl_properties); + } + + if (!_cl_staticdeps.empty()) + { + // determine all static dependencies of selected component + DisplayStaticDependencies(_cl_staticdeps); + } + + if (!_cl_dependson.empty()) + { + // list all components that depends on selected component + DisplayDependents(_cl_dependson); + } + + if (!_cl_showfunctions.empty()) + { + // determine all functions that are included / supported in selected component + DisplayFunctions(_cl_showfunctions); + } + + if (!_cl_usesfunction.empty()) + { + // list all components that are using selected function + DisplayUsesFunction(_cl_usesfunction); + } + } + + + // close output file + if (_outputf.is_open()) + { + _outputf.close(); + } + + // delete the temporary file + if (!_tempfile_location.empty()) + RemoveFile(_tempfile_location); + + return EXIT_NORMAL; +} + +// ---------------------------------------------------------------------------------------------------------- +