Files
bootloader/apps/elftosb/elftosb2/BootImageGenerator.h
László Monda e6c1fce5b4 Add KBOOT.
2016-08-10 01:45:15 +02:00

64 lines
2.1 KiB
C++

/*
* File: BootImageGenerator.h
*
* Copyright (c) Freescale Semiconductor, Inc. All rights reserved.
* See included license file for license details.
*/
#if !defined(_BootImageGenerator_h_)
#define _BootImageGenerator_h_
#include "OutputSection.h"
#include "BootImage.h"
#include "OptionContext.h"
namespace elftosb
{
/*!
* \brief Abstract base class for generators of specific boot image formats.
*
* Subclasses implement a concrete generator for a certain boot image format, but
* they all have the same interface.
*
* After creating an instance of a subclass the user adds OutputSection objects
* to the generator. These objects describe discrete sections within the resulting
* boot image file. If the format does not support multiple sections then only
* the first will be used.
*
* Options that are common to all boot image formats are handled by methods
* defined in this class. These are the current common options:
* - productVersion
* - componentVersion
* - driveTag
*/
class BootImageGenerator
{
public:
//! \brief Constructor.
BootImageGenerator() {}
//! \brief Destructor.
virtual ~BootImageGenerator() {}
//! \brief Add another section to the output.
void addOutputSection(OutputSection *section) { m_sections.push_back(section); }
//! \brief Set the global option context.
void setOptionContext(OptionContext *context) { m_options = context; }
//! \brief Pure virtual method to generate the output BootImage from input sections.
virtual BootImage *generate() = 0;
protected:
//! Type for a list of model output sections.
typedef std::vector<OutputSection *> section_vector_t;
section_vector_t m_sections; //!< Requested output sections.
OptionContext *m_options; //!< Global option context.
//! \brief Handle common product and component version options.
void processVersionOptions(BootImage *image);
//! \brief Handle the common option which sets the system drive tag.
void processDriveTagOption(BootImage *image);
};
}; // namespace elftosb
#endif // _BootImageGenerator_h_