xref: /netbsd-src/external/bsd/elftosb/dist/elftosb2/BootImageGenerator.cpp (revision 993229b6fea628ff8b1fa09146c80b0cfb2768eb)
1*993229b6Sjkunz /*
2*993229b6Sjkunz  *  BootImageGenerator.cpp
3*993229b6Sjkunz  *  elftosb
4*993229b6Sjkunz  *
5*993229b6Sjkunz  * Copyright (c) Freescale Semiconductor, Inc. All rights reserved.
6*993229b6Sjkunz  * See included license file for license details.
7*993229b6Sjkunz  */
8*993229b6Sjkunz 
9*993229b6Sjkunz #include "BootImageGenerator.h"
10*993229b6Sjkunz #include "Logging.h"
11*993229b6Sjkunz 
12*993229b6Sjkunz //! Name of product version option.
13*993229b6Sjkunz #define kProductVersionOption "productVersion"
14*993229b6Sjkunz 
15*993229b6Sjkunz //! Name of component version option.
16*993229b6Sjkunz #define kComponentVersionOption "componentVersion"
17*993229b6Sjkunz 
18*993229b6Sjkunz //! Name of option that specifies the drive tag for this .sb file.
19*993229b6Sjkunz #define kDriveTagOption "driveTag"
20*993229b6Sjkunz 
21*993229b6Sjkunz using namespace elftosb;
22*993229b6Sjkunz 
processVersionOptions(BootImage * image)23*993229b6Sjkunz void BootImageGenerator::processVersionOptions(BootImage * image)
24*993229b6Sjkunz {
25*993229b6Sjkunz 	// bail if no option context was set
26*993229b6Sjkunz 	if (!m_options)
27*993229b6Sjkunz 	{
28*993229b6Sjkunz 		return;
29*993229b6Sjkunz 	}
30*993229b6Sjkunz 
31*993229b6Sjkunz 	const StringValue * stringValue;
32*993229b6Sjkunz 	version_t version;
33*993229b6Sjkunz 
34*993229b6Sjkunz     // productVersion
35*993229b6Sjkunz 	if (m_options->hasOption(kProductVersionOption))
36*993229b6Sjkunz 	{
37*993229b6Sjkunz 		stringValue = dynamic_cast<const StringValue *>(m_options->getOption(kProductVersionOption));
38*993229b6Sjkunz 		if (stringValue)
39*993229b6Sjkunz 		{
40*993229b6Sjkunz 			version.set(*stringValue);
41*993229b6Sjkunz 			image->setProductVersion(version);
42*993229b6Sjkunz 		}
43*993229b6Sjkunz         else
44*993229b6Sjkunz         {
45*993229b6Sjkunz             Log::log(Logger::WARNING, "warning: productVersion option is an unexpected type\n");
46*993229b6Sjkunz         }
47*993229b6Sjkunz 	}
48*993229b6Sjkunz 
49*993229b6Sjkunz     // componentVersion
50*993229b6Sjkunz 	if (m_options->hasOption(kComponentVersionOption))
51*993229b6Sjkunz 	{
52*993229b6Sjkunz 		stringValue = dynamic_cast<const StringValue *>(m_options->getOption(kComponentVersionOption));
53*993229b6Sjkunz 		if (stringValue)
54*993229b6Sjkunz 		{
55*993229b6Sjkunz 			version.set(*stringValue);
56*993229b6Sjkunz 			image->setComponentVersion(version);
57*993229b6Sjkunz 		}
58*993229b6Sjkunz         else
59*993229b6Sjkunz         {
60*993229b6Sjkunz             Log::log(Logger::WARNING, "warning: componentVersion option is an unexpected type\n");
61*993229b6Sjkunz         }
62*993229b6Sjkunz 	}
63*993229b6Sjkunz }
64*993229b6Sjkunz 
processDriveTagOption(BootImage * image)65*993229b6Sjkunz void BootImageGenerator::processDriveTagOption(BootImage * image)
66*993229b6Sjkunz {
67*993229b6Sjkunz 	if (m_options->hasOption(kDriveTagOption))
68*993229b6Sjkunz 	{
69*993229b6Sjkunz 		const IntegerValue * intValue = dynamic_cast<const IntegerValue *>(m_options->getOption(kDriveTagOption));
70*993229b6Sjkunz 		if (intValue)
71*993229b6Sjkunz 		{
72*993229b6Sjkunz 			image->setDriveTag(intValue->getValue());
73*993229b6Sjkunz 		}
74*993229b6Sjkunz         else
75*993229b6Sjkunz         {
76*993229b6Sjkunz             Log::log(Logger::WARNING, "warning: driveTag option is an unexpected type\n");
77*993229b6Sjkunz         }
78*993229b6Sjkunz 	}
79*993229b6Sjkunz }
80*993229b6Sjkunz 
81