From 551028c0dc60d083623c0f8e8fa26ccfd9c60aa8 Mon Sep 17 00:00:00 2001 From: Cervenka Dusan Date: Tue, 10 Jan 2023 12:36:58 +0100 Subject: [PATCH 1/3] Modified name for common types macro scope. Signed-off-by: Cervenka Dusan --- erpcgen/src/Generator.cpp | 21 ++++++- erpcgen/src/annotations.h | 3 + .../src/templates/c_common_header.template | 6 +- erpcgen/test/test_scope_c.yml | 63 +++++++++++++++++++ 4 files changed, 89 insertions(+), 4 deletions(-) create mode 100644 erpcgen/test/test_scope_c.yml diff --git a/erpcgen/src/Generator.cpp b/erpcgen/src/Generator.cpp index 11e2d242f..36515d8c2 100644 --- a/erpcgen/src/Generator.cpp +++ b/erpcgen/src/Generator.cpp @@ -34,6 +34,9 @@ Generator::Generator(InterfaceDefinition *def, generator_type_t generatorType) , m_globals(&(def->getGlobals())) , m_generatorType(generatorType) { + string scopeName = "erpcShim"; + string scopeNamePrefix = ""; + m_templateData["erpcVersion"] = ERPC_VERSION; m_templateData["erpcVersionNumber"] = ERPC_VERSION_NUMBER; @@ -75,8 +78,24 @@ 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 != "") + { + scopeNamePrefix = "_"; } + m_templateData["scopeNamePrefix"] = scopeNamePrefix; // get group annotation with vector of theirs interfaces m_groups.clear(); diff --git a/erpcgen/src/annotations.h b/erpcgen/src/annotations.h index 148d15f60..afa0cc600 100644 --- a/erpcgen/src/annotations.h +++ b/erpcgen/src/annotations.h @@ -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" diff --git a/erpcgen/src/templates/c_common_header.template b/erpcgen/src/templates/c_common_header.template index 0ce6dd46a..95146bfec 100644 --- a/erpcgen/src/templates/c_common_header.template +++ b/erpcgen/src/templates/c_common_header.template @@ -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}{$scopeName}) +#define ERPC_TYPE_DEFINITIONS{$scopeNamePrefix}{$scopeName} {% if not empty(enums) %} // Enumerators data types declarations @@ -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}{$scopeName} {% endif -- commonTypesFile %} {% if not genCommonTypesFile %} diff --git a/erpcgen/test/test_scope_c.yml b/erpcgen/test/test_scope_c.yml new file mode 100644 index 000000000..bf34620fe --- /dev/null +++ b/erpcgen/test/test_scope_c.yml @@ -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 From b073a3dcd4bfa40b2d0de6dbe5cb99d05684f0cc Mon Sep 17 00:00:00 2001 From: Cervenka Dusan Date: Thu, 12 Jan 2023 10:34:21 +0100 Subject: [PATCH 2/3] Upper case all characters for scope identifier. Signed-off-by: Cervenka Dusan --- erpcgen/src/Generator.cpp | 5 +++++ erpcgen/src/templates/c_common_header.template | 6 +++--- erpcgen/test/test_scope_c.yml | 18 +++++++++--------- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/erpcgen/src/Generator.cpp b/erpcgen/src/Generator.cpp index 36515d8c2..b114560c8 100644 --- a/erpcgen/src/Generator.cpp +++ b/erpcgen/src/Generator.cpp @@ -35,6 +35,7 @@ Generator::Generator(InterfaceDefinition *def, generator_type_t generatorType) , m_generatorType(generatorType) { string scopeName = "erpcShim"; + string scopeNameC; string scopeNamePrefix = ""; m_templateData["erpcVersion"] = ERPC_VERSION; @@ -93,8 +94,12 @@ Generator::Generator(InterfaceDefinition *def, generator_type_t generatorType) 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 diff --git a/erpcgen/src/templates/c_common_header.template b/erpcgen/src/templates/c_common_header.template index 95146bfec..8c093ba79 100644 --- a/erpcgen/src/templates/c_common_header.template +++ b/erpcgen/src/templates/c_common_header.template @@ -32,8 +32,8 @@ {$>checkCrc()} {% endif -- not commonTypesFile %} {% if commonTypesFile == "" %} -#if !defined(ERPC_TYPE_DEFINITIONS{$scopeNamePrefix}{$scopeName}) -#define ERPC_TYPE_DEFINITIONS{$scopeNamePrefix}{$scopeName} +#if !defined(ERPC_TYPE_DEFINITIONS{$scopeNamePrefix}{$scopeNameC}) +#define ERPC_TYPE_DEFINITIONS{$scopeNamePrefix}{$scopeNameC} {% if not empty(enums) %} // Enumerators data types declarations @@ -102,7 +102,7 @@ extern const {$c.typeAndName};{$c.ilComment}{$loop.addNewLineIfNotLast} {% endfor -- consts %} {% endif -- consts %} -#endif // ERPC_TYPE_DEFINITIONS{$scopeNamePrefix}{$scopeName} +#endif // ERPC_TYPE_DEFINITIONS{$scopeNamePrefix}{$scopeNameC} {% endif -- commonTypesFile %} {% if not genCommonTypesFile %} diff --git a/erpcgen/test/test_scope_c.yml b/erpcgen/test/test_scope_c.yml index bf34620fe..e97752565 100644 --- a/erpcgen/test/test_scope_c.yml +++ b/erpcgen/test/test_scope_c.yml @@ -7,10 +7,10 @@ idl: | } test.h: - | - #if !defined(ERPC_TYPE_DEFINITIONS_erpcShim) - #define ERPC_TYPE_DEFINITIONS_erpcShim + #if !defined(ERPC_TYPE_DEFINITIONS_ERPCSHIM) + #define ERPC_TYPE_DEFINITIONS_ERPCSHIM - | - #endif // ERPC_TYPE_DEFINITIONS_erpcShim + #endif // ERPC_TYPE_DEFINITIONS_ERPCSHIM --- name: program name based scope @@ -23,10 +23,10 @@ idl: | } test.h: - | - #if !defined(ERPC_TYPE_DEFINITIONS_test) - #define ERPC_TYPE_DEFINITIONS_test + #if !defined(ERPC_TYPE_DEFINITIONS_TEST) + #define ERPC_TYPE_DEFINITIONS_TEST - | - #endif // ERPC_TYPE_DEFINITIONS_test + #endif // ERPC_TYPE_DEFINITIONS_TEST --- name: annotation based scope @@ -40,10 +40,10 @@ idl: | } test.h: - | - #if !defined(ERPC_TYPE_DEFINITIONS_myScope) - #define ERPC_TYPE_DEFINITIONS_myScope + #if !defined(ERPC_TYPE_DEFINITIONS_MYSCOPE) + #define ERPC_TYPE_DEFINITIONS_MYSCOPE - | - #endif // ERPC_TYPE_DEFINITIONS_myScope + #endif // ERPC_TYPE_DEFINITIONS_MYSCOPE --- name: empty scope name From 6a646d8cbacced197a210c855482ccfd95745d43 Mon Sep 17 00:00:00 2001 From: Cervenka Dusan Date: Tue, 7 Mar 2023 14:43:08 +0100 Subject: [PATCH 3/3] Fix compile issue Signed-off-by: Cervenka Dusan --- erpcgen/src/Generator.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/erpcgen/src/Generator.cpp b/erpcgen/src/Generator.cpp index b114560c8..88d2d7850 100644 --- a/erpcgen/src/Generator.cpp +++ b/erpcgen/src/Generator.cpp @@ -16,6 +16,7 @@ #include "annotations.h" #include "format_string.hpp" +#include #include #include #include