diff options
Diffstat (limited to 'src/tools/sdcc/sdcc.cpp')
-rw-r--r-- | src/tools/sdcc/sdcc.cpp | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/src/tools/sdcc/sdcc.cpp b/src/tools/sdcc/sdcc.cpp new file mode 100644 index 0000000..ba86273 --- /dev/null +++ b/src/tools/sdcc/sdcc.cpp @@ -0,0 +1,115 @@ +/*************************************************************************** + * Copyright (C) 2006 Nicolas Hadacek <hadacek@kde.org> * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + ***************************************************************************/ +#include "sdcc.h" + +#include "devices/list/device_list.h" +#include "sdcc_compile.h" +#include "sdcc_config.h" +#include "devices/pic/pic/pic_memory.h" +#include "common/global/pfile.h" +#include "common/global/process.h" +#include "sdcc_generator.h" + +//---------------------------------------------------------------------------- +bool SDCC::Base::checkExecutableResult(bool, QStringList &lines) const +{ + return ( lines.count()>0 && lines[0].startsWith("SDCC") ); +} + +//---------------------------------------------------------------------------- +QString SDCC::Group::informationText() const +{ + return i18n("The <a href=\"%1\">Small Devices C Compiler</a> is an open-source C compiler for several families of microcontrollers.").arg("http://sdcc.sourceforge.net"); +} + +const ::Tool::Base *SDCC::Group::base(Tool::Category category) const +{ + if ( category==Tool::Category::Assembler || category==Tool::Category::Librarian ) + return Tool::lister().group("gputils")->base(category); + return Tool::Group::base(category); +} + +Tool::Group::BaseData SDCC::Group::baseFactory(Tool::Category category) const +{ + if ( category==Tool::Category::Compiler ) return BaseData(new ::SDCC::Base, Both); + if ( category==Tool::Category::Linker) return BaseData(new ::SDCC::Base, ProjectOnly); + return BaseData(); +} + +SDCC::Group::Group() + : _checkDevicesTmp(_sview, ".c") +{ + // used to obtain device list + if ( _checkDevicesTmp.openForWrite() ) _checkDevicesTmp.appendText("void main(void) {}\n"); + _checkDevicesTmp.close(); +} + +QStringList SDCC::Group::checkDevicesOptions(uint i) const +{ + QStringList options; + options += QString("-m") + SDCC::FAMILY_DATA[i].name; + options += "-phelp"; + options += _checkDevicesTmp.url().filepath(); + return options; +} + +PURL::Directory SDCC::Group::autodetectDirectory(Compile::DirectoryType type, const PURL::Directory &dir, bool withWine) const +{ + return Tool::lister().group("gputils")->autodetectDirectory(type, dir, withWine); +} + +bool SDCC::Group::needs(bool withProject, Tool::Category category) const +{ + if ( category==Tool::Category::Assembler || category==Tool::Category::Librarian ) return Tool::lister().group("gputils")->needs(withProject, category); + return Tool::Group::needs(withProject, category); +} + +Compile::Process *SDCC::Group::processFactory(const Compile::Data &data) const +{ + switch (data.category.type()) { + case Tool::Category::Assembler: + case Tool::Category::Librarian: + return Tool::lister().group("gputils")->processFactory(data); + case Tool::Category::Compiler: + if (data.project) return new SDCC::CompileProjectFile; + return new SDCC::CompileStandaloneFile; + case Tool::Category::Linker: + return new SDCC::LinkProjectFile; + default: break; + } + return 0; +} + +Compile::Config *SDCC::Group::configFactory(::Project *project) const +{ + return new Config(project); +} + +PURL::FileType SDCC::Group::implementationType(PURL::ToolType type) const +{ + if ( type==PURL::ToolType::Assembler ) return PURL::AsmGPAsm; + if ( type==PURL::ToolType::Compiler ) return PURL::CSource; + return PURL::Nb_FileTypes; +} + +Tool::SourceGenerator *SDCC::Group::sourceGeneratorFactory() const +{ + return new SourceGenerator; +} + +bool SDCC::Group::generateDebugInformation(const QString &device) const +{ + switch (family(device)) { + case P14: return false; + case P16: return true; + case Nb_Families: break; + } + Q_ASSERT(false); + return false; +} |