You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
4.0 KiB
116 lines
4.0 KiB
/***************************************************************************
|
|
* 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, TQStringList &lines) const
|
|
{
|
|
return ( lines.count()>0 && lines[0].startsWith("SDCC") );
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
TQString 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.").tqarg("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();
|
|
}
|
|
|
|
TQStringList SDCC::Group::checkDevicesOptions(uint i) const
|
|
{
|
|
TQStringList options;
|
|
options += TQString("-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 TQString &device) const
|
|
{
|
|
switch (family(device)) {
|
|
case P14: return false;
|
|
case P16: return true;
|
|
case Nb_Families: break;
|
|
}
|
|
Q_ASSERT(false);
|
|
return false;
|
|
}
|