Skip to content

Commit

Permalink
[projmgr] ProjMgrGenerator: add GenerateCprjOptions
Browse files Browse the repository at this point in the history
Contributed by STMicroelectronics
Signed-off-by: Tarek BOCHKATI <tarek.bouchkati@st.com>
  • Loading branch information
tarek-bochkati committed May 12, 2022
1 parent 616db64 commit 6b0ae61
Show file tree
Hide file tree
Showing 6 changed files with 84 additions and 4 deletions.
1 change: 1 addition & 0 deletions tools/projmgr/include/ProjMgrGenerator.h
Expand Up @@ -41,6 +41,7 @@ class ProjMgrGenerator {
void GenerateCprjTarget(XMLTreeElement* element, const ContextItem& context);
void GenerateCprjComponents(XMLTreeElement* element, const ContextItem& context);
void GenerateCprjGroups(XMLTreeElement* element, const std::vector<GroupNode>& groups, const std::string& compiler);
void GenerateCprjOptions(XMLTreeElement* element, const BuildType& buildType);
void GenerateCprjMisc(XMLTreeElement* element, const std::vector<MiscItem>& misc, const std::string& compiler);
void GenerateCprjLinkerScript(XMLTreeElement* element, const std::string& compiler, const std::string& linkerScript);
void GenerateCprjVector(XMLTreeElement* element, const std::vector<std::string>& vec, std::string tag);
Expand Down
23 changes: 19 additions & 4 deletions tools/projmgr/src/ProjMgrGenerator.cpp
Expand Up @@ -167,7 +167,7 @@ void ProjMgrGenerator::GenerateCprjTarget(XMLTreeElement* element, const Context
targetOutputElement->AddAttribute("outdir", context.directories.outdir);
}

// TODO Generate toolchain settings (warnings, debug, includes)
GenerateCprjOptions(element, context.cproject->target.build);
GenerateCprjMisc(element, context.misc, context.toolchain.name);
GenerateCprjLinkerScript(element, context.toolchain.name, context.linkerScript);
GenerateCprjVector(element, context.defines, "defines");
Expand Down Expand Up @@ -201,7 +201,7 @@ void ProjMgrGenerator::GenerateCprjComponents(XMLTreeElement* element, const Con
}
}

// TODO Generate toolchain settings (warnings, debug)
GenerateCprjOptions(componentElement, component.second.second->build);
GenerateCprjMisc(componentElement, component.second.second->build.misc, context.toolchain.name);
GenerateCprjVector(componentElement, component.second.second->build.defines, "defines");
GenerateCprjVector(componentElement, component.second.second->build.undefines, "undefines");
Expand All @@ -219,6 +219,21 @@ void ProjMgrGenerator::GenerateCprjVector(XMLTreeElement* element, const vector<
}
}

void ProjMgrGenerator::GenerateCprjOptions(XMLTreeElement* element, const BuildType& buildType) {

if (buildType.optimize.empty() && buildType.debug.empty() && buildType.warnings.empty()) {
return;
}

XMLTreeElement *optionsElement = element->CreateElement("options");
if (optionsElement)
{
SetAttribute(optionsElement, "optimize", buildType.optimize);
SetAttribute(optionsElement, "debug", buildType.debug);
SetAttribute(optionsElement, "warnings", buildType.warnings);
}
}

void ProjMgrGenerator::GenerateCprjMisc(XMLTreeElement* element, const vector<MiscItem>& misc, const std::string& compiler) {
for (const auto& miscIt : misc) {
const map<string, vector<string>>& FLAGS_MATRIX = {
Expand Down Expand Up @@ -269,7 +284,7 @@ void ProjMgrGenerator::GenerateCprjGroups(XMLTreeElement* element, const vector<
groupElement->AddAttribute("name", groupNode.group);
}

// TODO Generate toolchain settings (warnings, debug)
GenerateCprjOptions(groupElement, groupNode.build);
GenerateCprjMisc(groupElement, groupNode.build.misc, compiler);
GenerateCprjVector(groupElement, groupNode.build.defines, "defines");
GenerateCprjVector(groupElement, groupNode.build.undefines, "undefines");
Expand All @@ -282,7 +297,7 @@ void ProjMgrGenerator::GenerateCprjGroups(XMLTreeElement* element, const vector<
if (fileElement) {
fileElement->AddAttribute("category", fileNode.category);

// TODO Generate toolchain settings (warnings, debug)
GenerateCprjOptions(fileElement, fileNode.build);
GenerateCprjMisc(fileElement, fileNode.build.misc, compiler);
GenerateCprjVector(fileElement, fileNode.build.defines, "defines");
GenerateCprjVector(fileElement, fileNode.build.undefines, "undefines");
Expand Down
@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<cprj schemaVersion="1.0.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="CPRJ.xsd">
<created timestamp="2022-05-12T10:27:56" tool="csolution 0.9.5+p7-g94ccb1e"/>

<info isLayer="false">
<description>Automatically generated project</description>
</info>

<packages>
<package name="RteTest_DFP" vendor="ARM" version="0.2.0:0.2.0"/>
</packages>

<compilers>
<compiler name="IAR" version="8.50.6"/>
</compilers>

<target Dfpu="NO_FPU" Dname="RteTest_ARMCM0_Dual" Dsecure="Non-secure" Dvendor="ARM:82" Pname="cm0_core1">
<output intdir="test.target_options+CM0_IntDir/" name="test.target_options+CM0" outdir="test.target_options+CM0_OutDir/" type="exe"/>
<options debug="on" optimize="size"/>
</target>

<components>
<component Cclass="Device" Cgroup="Startup" Cvariant="RteTest Startup" Cvendor="ARM" Cversion="2.0.3">
<file attr="config" category="sourceC" name="Device/ARM/ARMCM0/Source/startup_ARMCM0.c" version="2.0.3"/>
<file attr="config" category="sourceC" name="Device/ARM/ARMCM0/Source/system_ARMCM0.c" version="1.0.0"/>
</component>
<component Cclass="RteTest" Cgroup="CORE" Cvendor="ARM" Cversion="0.1.1"/>
</components>
</cprj>
@@ -0,0 +1,8 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/Open-CMSIS-Pack/devtools/schemas/projmgr/0.9.0/tools/projmgr/schemas/cproject.schema.json

project:
optimize: size
debug: on
components:
- component: Startup
- component: CORE
@@ -0,0 +1,10 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/Open-CMSIS-Pack/devtools/schemas/projmgr/0.9.0/tools/projmgr/schemas/csolution.schema.json

solution:
target-types:
- type: CM0
compiler: IAR
device: RteTest_ARMCM0_Dual:cm0_core1

projects:
- project: ./test.target_options.cproject.yml
17 changes: 17 additions & 0 deletions tools/projmgr/test/src/ProjMgrUnitTests.cpp
Expand Up @@ -584,6 +584,23 @@ TEST_F(ProjMgrUnitTests, RunProjMgr_Generator) {
testinput_folder + "/TestGenerator/ref/test-gpdsc.Debug+CM0.cprj");
}

TEST_F(ProjMgrUnitTests, RunProjMgr_TargetOptions)
{
char *argv[7];
// convert -s solution.yml
const string &csolution = testinput_folder + "/TestSolution/test.target_options.csolution.yml";
argv[1] = (char *)"convert";
argv[2] = (char *)"-s";
argv[3] = (char *)csolution.c_str();
argv[4] = (char *)"-o";
argv[5] = (char *)testoutput_folder.c_str();
EXPECT_EQ(0, RunProjMgr(6, argv));

// Check generated CPRJs
CompareFile(testoutput_folder + "/test.target_options+CM0/test.target_options+CM0.cprj",
testinput_folder + "/TestSolution/ref/test.target_options+CM0.cprj");
}

TEST_F(ProjMgrUnitTests, ListPacks) {
set<string> expected = {
"ARM::RteTest@0.1.0",
Expand Down

0 comments on commit 6b0ae61

Please sign in to comment.