Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 26 additions & 1 deletion erpcgen/src/Generator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include "annotations.h"
#include "format_string.hpp"

#include <algorithm>
#include <cstring>
#include <ctime>
#include <filesystem>
Expand All @@ -34,6 +35,10 @@ Generator::Generator(InterfaceDefinition *def, generator_type_t generatorType)
, m_globals(&(def->getGlobals()))
, m_generatorType(generatorType)
{
string scopeName = "erpcShim";
string scopeNameC;
string scopeNamePrefix = "";

m_templateData["erpcVersion"] = ERPC_VERSION;
m_templateData["erpcVersionNumber"] = ERPC_VERSION_NUMBER;

Expand Down Expand Up @@ -75,8 +80,28 @@ Generator::Generator(InterfaceDefinition *def, generator_type_t generatorType)
m_templateData["crc16"] = m_idlCrc16;
}

m_outputDirectory /= getAnnStringValue(m_def->getProgramSymbol(), OUTPUT_DIR_ANNOTATION);
m_outputDirectory /= getAnnStringValue(program, OUTPUT_DIR_ANNOTATION);

if (findAnnotation(program, SCOPE_NAME_ANNOTATION) == nullptr)
{
scopeName = program->getName();
}
else
{
scopeName = getAnnStringValue(program, SCOPE_NAME_ANNOTATION);
}
}

m_templateData["scopeName"] = scopeName;
if (scopeName != "")
{
scopeNameC = scopeName;
std::transform(scopeNameC.begin(), scopeNameC.end(), scopeNameC.begin(), ::toupper);

scopeNamePrefix = "_";
}
m_templateData["scopeNameC"] = scopeNameC;
m_templateData["scopeNamePrefix"] = scopeNamePrefix;

// get group annotation with vector of theirs interfaces
m_groups.clear();
Expand Down
3 changes: 3 additions & 0 deletions erpcgen/src/annotations.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@
//! Do not free memory for a parameter in the server shim.
#define RETAIN_ANNOTATION "retain"

//! Scope name for erpc shim code
#define SCOPE_NAME_ANNOTATION "scope_name"

//! Data handled through shared memory area
#define SHARED_ANNOTATION "shared"

Expand Down
6 changes: 3 additions & 3 deletions erpcgen/src/templates/c_common_header.template
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@
{$>checkCrc()}
{% endif -- not commonTypesFile %}
{% if commonTypesFile == "" %}
#if !defined(ERPC_TYPE_DEFINITIONS)
#define ERPC_TYPE_DEFINITIONS
#if !defined(ERPC_TYPE_DEFINITIONS{$scopeNamePrefix}{$scopeNameC})
#define ERPC_TYPE_DEFINITIONS{$scopeNamePrefix}{$scopeNameC}
{% if not empty(enums) %}

// Enumerators data types declarations
Expand Down Expand Up @@ -102,7 +102,7 @@ extern const {$c.typeAndName};{$c.ilComment}{$loop.addNewLineIfNotLast}
{% endfor -- consts %}
{% endif -- consts %}

#endif // ERPC_TYPE_DEFINITIONS
#endif // ERPC_TYPE_DEFINITIONS{$scopeNamePrefix}{$scopeNameC}
{% endif -- commonTypesFile %}

{% if not genCommonTypesFile %}
Expand Down
63 changes: 63 additions & 0 deletions erpcgen/test/test_scope_c.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
---
name: default scope
desc: without program name and annotation
idl: |
interface test {
bar(int32 x) -> void
}
test.h:
- |
#if !defined(ERPC_TYPE_DEFINITIONS_ERPCSHIM)
#define ERPC_TYPE_DEFINITIONS_ERPCSHIM
- |
#endif // ERPC_TYPE_DEFINITIONS_ERPCSHIM

---
name: program name based scope
desc: scope based on program name
idl: |
program test

interface test {
bar(int32 x) -> void
}
test.h:
- |
#if !defined(ERPC_TYPE_DEFINITIONS_TEST)
#define ERPC_TYPE_DEFINITIONS_TEST
- |
#endif // ERPC_TYPE_DEFINITIONS_TEST

---
name: annotation based scope
desc: scope based on annotation value
idl: |
@scope_name("myScope")
program test

interface test {
bar(int32 x) -> void
}
test.h:
- |
#if !defined(ERPC_TYPE_DEFINITIONS_MYSCOPE)
#define ERPC_TYPE_DEFINITIONS_MYSCOPE
- |
#endif // ERPC_TYPE_DEFINITIONS_MYSCOPE

---
name: empty scope name
desc: scope based on annotation value ""
idl: |
@scope_name("")
program test

interface test {
bar(int32 x) -> void
}
test.h:
- |
#if !defined(ERPC_TYPE_DEFINITIONS)
#define ERPC_TYPE_DEFINITIONS
- |
#endif // ERPC_TYPE_DEFINITIONS