From 14e21cff8fcabb25779c891448b6351812b2a833 Mon Sep 17 00:00:00 2001 From: ebensza <bence.janos.szabo@ericsson.com> Date: Mon, 1 Aug 2016 12:46:31 +0200 Subject: [PATCH] implemented new code splitting mechanism (split to equal slices) Change-Id: Ifd2fa1b9e2ce3a57f442a08a3ea692c434dced06 Signed-off-by: ebensza <bence.janos.szabo@ericsson.com> --- compiler2/AST.cc | 263 ++++++++++++----- compiler2/Code.cc | 31 ++ compiler2/CodeGenHelper.cc | 275 +++++++++++++++++- compiler2/CodeGenHelper.hh | 15 +- compiler2/TypeCompat.cc | 9 +- compiler2/Type_codegen.cc | 52 +++- compiler2/asn1/AST_asn1.cc | 7 +- compiler2/compiler.1 | 6 +- compiler2/main.cc | 12 +- compiler2/main.hh | 3 +- compiler2/makefile.c | 154 ++++++++-- compiler2/ttcn3/AST_ttcn3.cc | 8 +- compiler2/ttcn3/Attributes.cc | 61 ++-- compiler2/ttcn3/Attributes.hh | 13 +- compiler2/ttcn3/compiler.h | 16 + regression_test/ASN1/Test303/Makefile | 6 + regression_test/ASN1/Test307/Makefile | 6 + regression_test/ASN1/Test308/Makefile | 6 + regression_test/ASN1/Test309/Makefile | 6 + regression_test/ASN1/Test310/Makefile | 6 + regression_test/ASN1/Test330/Makefile | 6 + regression_test/ASN1/Test332/Makefile | 6 + regression_test/ASN1/Test338/Makefile | 6 + regression_test/ASN1/Test340/Makefile | 6 + regression_test/ASN1/Test342/Makefile | 6 + regression_test/ASN1/Test344/Makefile | 6 + regression_test/ASN1/Test346/Makefile | 6 + regression_test/ASN1/Test348/Makefile | 6 + regression_test/ASN1/Test350/Makefile | 6 + regression_test/ASN1/Test352/Makefile | 6 + regression_test/ASN1/Test354/Makefile | 6 + regression_test/ASN1/Test356/Makefile | 6 + regression_test/ASN1/Test358/Makefile | 6 + regression_test/ASN1/Test360/Makefile | 6 + regression_test/ASN1/Test38/Makefile | 6 + regression_test/ASN1/codeGeneration2/Makefile | 6 + regression_test/ASN1/enum1/Makefile | 6 + regression_test/ASN1/enum2/Makefile | 6 + regression_test/ASN1/hyphen/Makefile | 6 + regression_test/ASN1/hyphen/hyphen | 2 +- regression_test/ASN1/keyword/Makefile | 6 + regression_test/ASN1/transformations/Makefile | 6 + regression_test/BER/Makefile | 6 + regression_test/BER_x682/Makefile | 6 + regression_test/BER_x682_wa/Makefile | 6 + regression_test/CRTR00015758/Makefile | 8 +- regression_test/ERC/Makefile | 17 +- regression_test/HQ16404/Makefile | 8 +- regression_test/Makefile.regression | 11 + regression_test/RAW/Annex_E_variants/Makefile | 6 + regression_test/RAW/Examples/Makefile | 6 + regression_test/RAW/HN25015/Makefile | 8 +- regression_test/RAW/HQ26535/Makefile | 8 +- regression_test/RAW/HQ49956/Makefile | 8 +- regression_test/RAW/HS16977/Makefile | 8 +- regression_test/RAW/ustr/Makefile | 8 +- regression_test/XML/AbstractBlock/Makefile | 8 +- regression_test/XML/EXER-whitepaper/Makefile | 6 + regression_test/XML/HM60295/Makefile | 6 + regression_test/XML/HN15589/Makefile | 6 + regression_test/XML/HQ30408/Makefile | 8 +- regression_test/XML/HR49727/Makefile | 8 +- regression_test/XML/HU13380/Makefile | 8 +- regression_test/XML/NegativeTest/Makefile | 8 +- regression_test/XML/TTCNandXML/Makefile | 6 + regression_test/XML/UseNilLong/Makefile | 7 +- regression_test/XML/XER/Makefile | 6 + regression_test/XML/XMLqualif/Makefile | 6 + .../PIPEasp_CNL113334/test/Makefile | 5 + regression_test/XML/XmlWorkflow/bin/prj2mk.pl | 3 +- .../XML/XmlWorkflow/bin2/prj2mk.pl | 3 +- .../XML/xsdConverter/Makefile.converter | 5 + .../acceptance_test/Fibonacci/Makefile | 6 + .../acceptance_test/chinese/Makefile | 6 + .../acceptance_test/comptest/Makefile | 6 + .../acceptance_test/testerlanc/Makefile | 6 + regression_test/all_from/Makefile | 8 +- regression_test/anytype/Makefile | 6 + regression_test/anytypeOper/Makefile | 6 + regression_test/arrayOper/Makefile | 6 + regression_test/assignmentNotation/Makefile | 6 + regression_test/basicStatem/Makefile | 6 + regression_test/bitstrOper/Makefile | 6 + regression_test/boolOper/Makefile | 6 + .../cfgFile/define/macro_reference/Makefile | 5 +- .../cfgFile/define/structured/Makefile | 5 +- .../module_parameters/assignment/Makefile | 5 +- .../cfgFile/module_parameters/concat/Makefile | 5 +- .../module_parameters/references/Makefile | 5 +- .../cfgFile/ordered_include/Makefile | 5 +- .../cfgFile/testport_parameters/Makefile | 5 +- regression_test/charOper/Makefile | 6 + regression_test/charstrOper/Makefile | 6 + regression_test/checkstate/Makefile | 5 + regression_test/commMessage/Makefile | 6 + regression_test/commProcedure/Makefile | 6 + regression_test/compileonly/HT48786/Makefile | 6 + .../compileonly/assignmentNotation/Makefile | 6 + .../compileonly/attribQualif/Makefile | 6 + .../compileonly/circularImport/Makefile | 6 + .../compileonly/circularImport2/Makefile | 6 + .../compileonly/compareImported/Makefile | 6 + .../compileonly/compoundif/Makefile | 6 + .../defaultParamUsageBeforeDecl/Makefile | 6 + .../compileonly/dynamicTemplate/Makefile | 7 + regression_test/compileonly/isbound/Makefile | 6 + .../namedActualParameters/Makefile | 6 + regression_test/compileonly/openType/Makefile | 6 + .../compileonly/openTypeNames/Makefile | 6 + .../optionalAssignCompare/Makefile | 6 + .../compileonly/portConstructor/Makefile | 6 + .../compileonly/selectCase/Makefile | 6 + .../compileonly/styleGuide/Makefile | 6 + .../compileonly/topLevelPdu/Makefile | 6 + .../compileonly/typeInstantiation/Makefile | 6 + regression_test/configOper/Makefile | 6 + regression_test/controlTimer/Makefile | 6 + regression_test/customEncoding/Makefile | 6 + regression_test/defaultOper/Makefile | 6 + regression_test/enumOper/Makefile | 6 + regression_test/floatOper/Makefile | 6 + regression_test/functionReference/Makefile | 6 + regression_test/functionSubref/Makefile | 6 + regression_test/hexstrOper/Makefile | 6 + regression_test/hostid/Makefile | 5 + regression_test/iconv/Makefile | 6 + regression_test/implicitMsgEncoding/Makefile | 6 + regression_test/implicitOmit/Makefile | 8 +- regression_test/intOper/Makefile | 6 + regression_test/ipv6/Makefile | 6 + regression_test/ispresent/Makefile | 6 + regression_test/json/Makefile | 6 + regression_test/junitlogger/Makefile | 6 + regression_test/lazyEval/Makefile | 5 +- regression_test/logFiles/Makefile | 6 + regression_test/logger_control/Makefile | 8 +- .../logger_control/TitanLoggerControl.ttcn | 1 - regression_test/loggerplugin/Makefile | 6 + regression_test/lostTimer/Makefile | 6 + regression_test/macros/Makefile | 6 + regression_test/modifiedTemplate/Makefile | 6 + .../namedActualParameters/Makefile | 6 + regression_test/negativeTest/Makefile | 6 + regression_test/nonMandatoryPar/Makefile | 6 + regression_test/objidOper/Makefile | 6 + regression_test/octetstrOper/Makefile | 6 + regression_test/omitdef/Makefile | 6 + regression_test/pattern_quadruples/Makefile | 6 + regression_test/preCompilerFlags/Makefile | 6 + regression_test/predefFunction/Makefile | 7 + regression_test/profiler/Makefile | 12 + regression_test/recofOper/Makefile | 6 + regression_test/recordOper/Makefile | 6 + regression_test/setOper/Makefile | 6 + regression_test/setofMatch/Makefile | 6 + regression_test/setofOper/Makefile | 6 + regression_test/slider/Makefile | 8 +- regression_test/templateAnytype/Makefile | 6 + regression_test/templateBitstr/Makefile | 6 + regression_test/templateBool/Makefile | 6 + regression_test/templateChar/Makefile | 6 + regression_test/templateCharstr/Makefile | 6 + regression_test/templateEnum/Makefile | 6 + regression_test/templateFloat/Makefile | 6 + regression_test/templateHexstr/Makefile | 6 + regression_test/templateInt/Makefile | 6 + regression_test/templateOctetstr/Makefile | 6 + .../templateOmit/LegacyTests/Makefile | 6 + .../templateOmit/NewTests/Makefile | 6 + regression_test/templateRec/Makefile | 6 + regression_test/templateRecof/Makefile | 6 + regression_test/templateSet/Makefile | 6 + regression_test/templateSetof/Makefile | 6 + regression_test/templateUnicharstr/Makefile | 6 + regression_test/templateUnion/Makefile | 6 + regression_test/testcase_defparam/Makefile | 8 +- regression_test/text2ttcn/Makefile | 4 +- regression_test/transparent/Makefile | 8 +- regression_test/tryCatch/Makefile | 6 + regression_test/ttcn2json/Makefile | 6 + regression_test/typeCompat/Makefile | 6 + regression_test/ucharstrOper/Makefile | 5 + regression_test/uidChars/Makefile | 5 + regression_test/unionOper/Makefile | 6 + regression_test/verdictOper/Makefile | 6 + regression_test/visibility/Makefile | 6 + usrguide/referenceguide.doc | Bin 1924096 -> 1926656 bytes 187 files changed, 1760 insertions(+), 221 deletions(-) delete mode 120000 regression_test/logger_control/TitanLoggerControl.ttcn diff --git a/compiler2/AST.cc b/compiler2/AST.cc index 82686289f..fcaf27e50 100644 --- a/compiler2/AST.cc +++ b/compiler2/AST.cc @@ -20,6 +20,7 @@ * Kovacs, Ferenc * Raduly, Csaba * Szabados, Kristof + * Szabo, Bence Janos * Szabo, Janos Zoltan – initial implementation * Szalai, Gabor * Zalanyi, Balazs Andor @@ -49,7 +50,7 @@ reffer::reffer(const char*) {} namespace Common { - + // ================================= // ===== Modules // ================================= @@ -356,7 +357,7 @@ namespace Common { if (bits == 0) continue; if (is_nonempty) src = mputstr(src, ",\n"); else { - src = mputstr(src, "static const unsigned char "); + src = mputprintf(src, "%sconst unsigned char ", split_to_slices ? "" : "static "); is_nonempty = true; } src = mputprintf(src, "%s_bits[] = { ", @@ -395,12 +396,14 @@ namespace Common { if (splitting) hdr = mputstr(hdr, ";\n"); } - void Module::generate_bp_literals(char *&src, char *& /*hdr*/) + void Module::generate_bp_literals(char *&src, char *& hdr) { if (bp_literals.size() == 0) return; for (size_t i = 0; i < bp_literals.size(); i++) { if (i > 0) src = mputstr(src, ",\n"); - else src = mputstr(src, "static const unsigned char "); + else { + src = mputprintf(src, "%sconst unsigned char ", split_to_slices ? "" : "static "); + } src = mputprintf(src, "%s_elements[] = { ", bp_literals.get_nth_elem(i)->c_str()); const string& str = bp_literals.get_nth_key(i); @@ -427,13 +430,29 @@ namespace Common { } src = mputstr(src, ";\n"); for (size_t i = 0; i < bp_literals.size(); i++) { - if (i > 0) src = mputstr(src, ",\n"); - else src = mputstr(src, "static const BITSTRING_template "); + if (i > 0) { + src = mputstr(src, ",\n"); + if (split_to_slices) { + hdr = mputstr(hdr, ",\n"); + } + } + else { + src = mputprintf(src, "%sconst BITSTRING_template ", split_to_slices ? "" : "static "); + if (split_to_slices) { + hdr = mputprintf(hdr, "extern const BITSTRING_template "); + } + } const char *name = bp_literals.get_nth_elem(i)->c_str(); src = mputprintf(src, "%s(%lu, %s_elements)", name, (unsigned long) bp_literals.get_nth_key(i).size(), name); + if (split_to_slices) { + hdr = mputstr(hdr, name); + } } src = mputstr(src, ";\n"); + if (split_to_slices) { + hdr = mputstr(hdr, ";\n"); + } } void Module::generate_hs_literals(char *&src, char *&hdr) @@ -451,7 +470,7 @@ namespace Common { const char *str_ptr = str.c_str(); if (is_nonempty) src = mputstr(src, ",\n"); else { - src = mputstr(src, "static const unsigned char "); + src = mputprintf(src, "%sconst unsigned char ", split_to_slices ? "" : "static "); is_nonempty = true; } src = mputprintf(src, "%s_nibbles[] = { ", @@ -494,12 +513,15 @@ namespace Common { if (splitting) hdr = mputstr(hdr, ";\n"); } - void Module::generate_hp_literals(char *&src, char *& /*hdr*/) + void Module::generate_hp_literals(char *&src, char *& hdr) { if (hp_literals.size() == 0) return; for (size_t i = 0; i < hp_literals.size(); i++) { - if (i > 0) src = mputstr(src, ",\n"); - else src = mputstr(src, "static const unsigned char "); + if (i > 0) { + src = mputstr(src, ",\n"); + } else { + src = mputprintf(src, "%sconst unsigned char ", split_to_slices ? "" : "static "); + } src = mputprintf(src, "%s_elements[] = { ", hp_literals.get_nth_elem(i)->c_str()); const string& str = hp_literals.get_nth_key(i); @@ -517,13 +539,28 @@ namespace Common { } src = mputstr(src, ";\n"); for (size_t i = 0; i < hp_literals.size(); i++) { - if (i > 0) src = mputstr(src, ",\n"); - else src = mputstr(src, "static const HEXSTRING_template "); + if (i > 0) { + src = mputstr(src, ",\n"); + if (split_to_slices) { + hdr = mputstr(hdr, ",\n"); + } + } else { + src = mputprintf(src, "%sconst HEXSTRING_template ", split_to_slices ? "" : "static "); + if (split_to_slices) { + hdr = mputprintf(hdr, "extern const HEXSTRING_template "); + } + } const char *name = hp_literals.get_nth_elem(i)->c_str(); src = mputprintf(src, "%s(%lu, %s_elements)", name, (unsigned long) hp_literals.get_nth_key(i).size(), name); + if (split_to_slices) { + hdr = mputstr(hdr, name); + } } src = mputstr(src, ";\n"); + if (split_to_slices) { + hdr = mputstr(hdr, ";\n"); + } } void Module::generate_os_literals(char *&src, char *&hdr) @@ -542,7 +579,7 @@ namespace Common { const char *str_ptr = str.c_str(); if (is_nonempty) src = mputstr(src, ",\n"); else { - src = mputstr(src, "static const unsigned char "); + src = mputprintf(src, "%sconst unsigned char ", split_to_slices ? "" : "static "); is_nonempty = true; } src = mputprintf(src, "%s_octets[] = { ", @@ -576,13 +613,16 @@ namespace Common { if (splitting) hdr = mputstr(hdr, ";\n"); } - void Module::generate_op_literals(char *&src, char *& /*hdr*/) + void Module::generate_op_literals(char *&src, char *& hdr) { if (op_literals.size() == 0) return; vector<size_t> pattern_lens; for(size_t i = 0; i < op_literals.size(); i++) { - if (i > 0) src = mputstr(src, ",\n"); - else src = mputstr(src, "static const unsigned short "); + if (i > 0) { + src = mputstr(src, ",\n"); + } else { + src = mputprintf(src, "%sconst unsigned short ", split_to_slices ? "" : "static "); + } src = mputprintf(src, "%s_elements[] = { ", op_literals.get_nth_elem(i)->c_str()); const string& str = op_literals.get_nth_key(i); @@ -610,13 +650,29 @@ namespace Common { } src = mputstr(src, ";\n"); for (size_t i = 0; i < op_literals.size(); i++) { - if (i > 0) src = mputstr(src, ",\n"); - else src = mputstr(src, "static const OCTETSTRING_template "); + if (i > 0) { + src = mputstr(src, ",\n"); + if (split_to_slices) { + hdr = mputstr(hdr, ",\n"); + } + } + else { + src = mputprintf(src, "%sconst OCTETSTRING_template ", split_to_slices ? "" : "static "); + if (split_to_slices) { + hdr = mputprintf(hdr, "extern const OCTETSTRING_template "); + } + } const char *name = op_literals.get_nth_elem(i)->c_str(); src = mputprintf(src, "%s(%lu, %s_elements)", name, (unsigned long) *pattern_lens[i], name); + if (split_to_slices) { + hdr = mputstr(hdr, name); + } } src = mputstr(src, ";\n"); + if (split_to_slices) { + hdr = mputstr(hdr, ";\n"); + } for (size_t i = 0; i < pattern_lens.size(); i++) delete pattern_lens[i]; pattern_lens.clear(); } @@ -674,8 +730,12 @@ namespace Common { const string& pattern = pp_literals.get_nth_key(i); size_t pattern_len = pattern.size(); const char *pattern_ptr = pattern.c_str(); - if (i > 0) src = mputstr(src, ",\n"); - else src = mputstr(src, "static const unsigned char "); + if (i > 0) { + src = mputstr(src, ",\n"); + } + else { + src = mputprintf(src, "%sconst unsigned char ", split_to_slices ? "" : "static "); + } src = mputprintf(src, "%s[] = { ", pp_literals.get_nth_elem(i)->c_str()); if (pattern_len % 8 != 0) FATAL_ERROR("Module::generate_pp_literals()"); size_t nof_octets = pattern_len / 8; @@ -704,7 +764,7 @@ namespace Common { const char *str_ptr = str.c_str(); if (i > 0) src = mputstr(src, ",\n"); - else src = mputstr(src, "static const Token_Match "); + else src = mputprintf(src, "%sconst Token_Match ", split_to_slices ? "" : "static "); src = mputprintf(src, "%s(\"", mp_literals.get_nth_elem(i)->c_str()); src = Code::translate_string(src, str_ptr + 1); @@ -730,7 +790,7 @@ namespace Common { if (value_size < 2) continue; if (array_needed) src = mputstr(src, ",\n"); else { - src = mputstr(src, "static const universal_char "); + src = mputprintf(src, "%sconst universal_char ", split_to_slices ? "" : "static "); array_needed = true; } src = mputprintf(src, "%s_uchars[] = { ", @@ -777,12 +837,12 @@ namespace Common { if (splitting) hdr = mputstr(hdr, ";\n"); } - void Module::generate_oid_literals(char *&src, char *& /*hdr*/) + void Module::generate_oid_literals(char *&src, char *& hdr) { if (oid_literals.size() == 0) return; for (size_t i = 0; i < oid_literals.size(); i++) { if (i > 0) src = mputstr(src, ",\n"); - else src = mputstr(src, "static const OBJID::objid_element "); + else src = mputprintf(src, "%sconst OBJID::objid_element ", split_to_slices ? "" : "static "); src = mputprintf(src, "%s_comps[] = { %s }", oid_literals.get_nth_elem(i)->oid_id.c_str(), @@ -792,14 +852,30 @@ namespace Common { for(size_t i = 0; i < oid_literals.size(); i++) { const OID_literal *litstruct = oid_literals.get_nth_elem(i); - if (i > 0) src = mputstr(src, ",\n"); - else src = mputstr(src, "static const OBJID "); + if (i > 0) { + src = mputstr(src, ",\n"); + if (split_to_slices) { + hdr = mputstr(hdr, ",\n"); + } + } + else { + src = mputprintf(src, "%sconst OBJID ", split_to_slices ? "" : "static "); + if (split_to_slices) { + hdr = mputstr(hdr, "extern const OBJID "); + } + } src = mputprintf(src, "%s(%lu, %s_comps)", litstruct->oid_id.c_str(), (unsigned long) litstruct->nof_elems, litstruct->oid_id.c_str()); + if (split_to_slices) { + hdr = mputstr(hdr, litstruct->oid_id.c_str()); + } } src = mputstr(src, ";\n"); + if (split_to_slices) { + hdr = mputstr(hdr, ";\n"); + } } void Module::generate_functions(output_struct *output) @@ -819,11 +895,11 @@ namespace Common { // always generate pre_init_module if the file is profiled if (output->functions.pre_init || profiled || debugged) { output->source.static_function_prototypes = - mputstr(output->source.static_function_prototypes, - "static void pre_init_module();\n"); - output->source.static_function_bodies = mputstr(output->source.static_function_bodies, - "static void pre_init_module()\n" - "{\n"); + mputprintf(output->source.static_function_prototypes, + "%svoid pre_init_module();\n", split_to_slices ? "extern " : "static "); + output->source.static_function_bodies = mputprintf(output->source.static_function_bodies, + "%svoid pre_init_module()\n" + "{\n", split_to_slices ? "" : "static "); if (include_location_info) { output->source.static_function_bodies = mputstr(output->source.static_function_bodies, @@ -866,11 +942,11 @@ namespace Common { // post_init function bool has_post_init = false; if (output->functions.post_init) { - output->source.static_function_prototypes = mputstr(output->source.static_function_prototypes, - "static void post_init_module();\n"); - output->source.static_function_bodies = mputstr(output->source.static_function_bodies, - "static void post_init_module()\n" - "{\n"); + output->source.static_function_prototypes = mputprintf(output->source.static_function_prototypes, + "%svoid post_init_module();\n", split_to_slices ? "extern " : "static "); + output->source.static_function_bodies = mputprintf(output->source.static_function_bodies, + "%svoid post_init_module()\n" + "{\n", split_to_slices ? "" : "static "); if (include_location_info) { output->source.static_function_bodies = mputstr(output->source.static_function_bodies, @@ -907,12 +983,12 @@ namespace Common { // set_param function bool has_set_param; if (output->functions.set_param) { - output->source.static_function_prototypes = mputstr(output->source.static_function_prototypes, - "static boolean set_module_param(Module_Param& param);\n"); - output->source.static_function_bodies = mputstr(output->source.static_function_bodies, - "static boolean set_module_param(Module_Param& param)\n" + output->source.static_function_prototypes = mputprintf(output->source.static_function_prototypes, + "%sboolean set_module_param(Module_Param& param);\n", split_to_slices ? "extern " : "static "); + output->source.static_function_bodies = mputprintf(output->source.static_function_bodies, + "%sboolean set_module_param(Module_Param& param)\n" "{\n" - "const char* const par_name = param.get_id()->get_current_name();\n"); + "const char* const par_name = param.get_id()->get_current_name();\n", split_to_slices ? "" : "static "); output->source.static_function_bodies = mputstr(output->source.static_function_bodies, output->functions.set_param); output->source.static_function_bodies = @@ -925,12 +1001,12 @@ namespace Common { // get_param function bool has_get_param; if (output->functions.get_param) { - output->source.static_function_prototypes = mputstr(output->source.static_function_prototypes, - "static Module_Param* get_module_param(Module_Param_Name& param_name);\n"); - output->source.static_function_bodies = mputstr(output->source.static_function_bodies, - "static Module_Param* get_module_param(Module_Param_Name& param_name)\n" + output->source.static_function_prototypes = mputprintf(output->source.static_function_prototypes, + "%sModule_Param* get_module_param(Module_Param_Name& param_name);\n", split_to_slices ? "extern " : "static "); + output->source.static_function_bodies = mputprintf(output->source.static_function_bodies, + "%sModule_Param* get_module_param(Module_Param_Name& param_name)\n" "{\n" - "const char* const par_name = param_name.get_current_name();\n"); + "const char* const par_name = param_name.get_current_name();\n", split_to_slices ? "" : "static "); output->source.static_function_bodies = mputstr(output->source.static_function_bodies, output->functions.get_param); output->source.static_function_bodies = @@ -943,11 +1019,11 @@ namespace Common { // log_param function bool has_log_param; if (output->functions.log_param) { - output->source.static_function_prototypes = mputstr(output->source.static_function_prototypes, - "static void log_module_param();\n"); - output->source.static_function_bodies = mputstr(output->source.static_function_bodies, - "static void log_module_param()\n" - "{\n"); + output->source.static_function_prototypes = mputprintf(output->source.static_function_prototypes, + "%svoid log_module_param();\n", split_to_slices ? "extern " : "static "); + output->source.static_function_bodies = mputprintf(output->source.static_function_bodies, + "%svoid log_module_param()\n" + "{\n", split_to_slices ? "" : "static "); output->source.static_function_bodies = mputstr(output->source.static_function_bodies, output->functions.log_param); output->source.static_function_bodies = mputstr(output->source.static_function_bodies, @@ -960,14 +1036,14 @@ namespace Common { bool has_init_comp; if (output->functions.init_comp) { output->source.static_function_prototypes = - mputstr(output->source.static_function_prototypes, - "static boolean init_comp_type(" - "const char *component_type, boolean init_base_comps);\n"); + mputprintf(output->source.static_function_prototypes, + "%sboolean init_comp_type(" + "const char *component_type, boolean init_base_comps);\n", split_to_slices ? "extern " : "static "); output->source.static_function_bodies = - mputstr(output->source.static_function_bodies, - "static boolean init_comp_type(const char *component_type, " + mputprintf(output->source.static_function_bodies, + "%sboolean init_comp_type(const char *component_type, " "boolean init_base_comps)\n" - "{\n(void)init_base_comps;\n"); + "{\n(void)init_base_comps;\n", split_to_slices ? "" : "static "); output->source.static_function_bodies = mputstr(output->source.static_function_bodies, output->functions.init_comp); @@ -981,13 +1057,13 @@ namespace Common { // start function bool has_start; if (output->functions.start) { - output->source.static_function_prototypes = mputstr(output->source.static_function_prototypes, - "static boolean start_ptc_function(const char *function_name, " - "Text_Buf& function_arguments);\n"); - output->source.static_function_bodies = mputstr(output->source.static_function_bodies, - "static boolean start_ptc_function(const char *function_name, " + output->source.static_function_prototypes = mputprintf(output->source.static_function_prototypes, + "%sboolean start_ptc_function(const char *function_name, " + "Text_Buf& function_arguments);\n", split_to_slices ? "extern " : "static "); + output->source.static_function_bodies = mputprintf(output->source.static_function_bodies, + "%sboolean start_ptc_function(const char *function_name, " "Text_Buf& function_arguments)\n" - "{\n"); + "{\n", split_to_slices ? "" : "static "); output->source.static_function_bodies = mputstr(output->source.static_function_bodies, output->functions.start); output->source.static_function_bodies = @@ -1000,11 +1076,11 @@ namespace Common { // control part bool has_control; if (output->functions.control) { - output->source.static_function_prototypes = mputstr(output->source.static_function_prototypes, - "static void module_control_part();\n"); - output->source.static_function_bodies = mputstr(output->source.static_function_bodies, - "static void module_control_part()\n" - "{\n"); + output->source.static_function_prototypes = mputprintf(output->source.static_function_prototypes, + "%svoid module_control_part();\n", split_to_slices ? "extern " : "static "); + output->source.static_function_bodies = mputprintf(output->source.static_function_bodies, + "%svoid module_control_part()\n" + "{\n", split_to_slices ? "" : "static "); output->source.static_function_bodies = mputstr(output->source.static_function_bodies, output->functions.control); output->source.static_function_bodies = @@ -1015,8 +1091,11 @@ namespace Common { } else has_control = false; // module checksum if (has_checksum) { - output->source.string_literals = mputstr(output->source.string_literals, - "static const unsigned char module_checksum[] = {"); + if (split_to_slices) { + output->header.global_vars = mputprintf(output->header.global_vars, "extern const unsigned char module_checksum[];\n"); + } + output->source.string_literals = mputprintf(output->source.string_literals, + "%sconst unsigned char module_checksum[] = {", split_to_slices ? "" : "static "); for (size_t i = 0; i < sizeof(module_checksum); i++) { if (i > 0) output->source.string_literals = mputc(output->source.string_literals, ','); @@ -1046,10 +1125,17 @@ namespace Common { if (num_xml_namespaces != 0 || (control_ns && control_ns_prefix)) { output->source.global_vars = mputprintf(output->source.global_vars, - "static const size_t num_namespaces = %lu;\n" - "static const namespace_t xml_namespaces[num_namespaces+1] = {\n" - , (unsigned long)num_xml_namespaces + "%sconst size_t num_namespaces = %lu;\n" + "%sconst namespace_t xml_namespaces[num_namespaces+1] = {\n" + , split_to_slices ? "" : "static ", (unsigned long)num_xml_namespaces + , split_to_slices ? "" : "static " ); + if (split_to_slices) { + output->header.global_vars = mputprintf(output->header.global_vars, + "extern const size_t num_namespaces;\n"); + output->header.global_vars = mputprintf(output->header.global_vars, + "extern const namespace_t xml_namespaces[];\n"); + } for (size_t i=0; i < namespaces.size(); ++i) { if (used_namespaces.has_key(i)) { output->source.global_vars = mputprintf(output->source.global_vars, @@ -1126,19 +1212,31 @@ namespace Common { duplicate_underscores ? module_name : modid->get_ttcnname().c_str()); output->source.global_vars = mputprintf(output->source.global_vars, - "\nstatic const RuntimeVersionChecker ver_checker(" + "\n%sconst RuntimeVersionChecker ver_checker(" " current_runtime_version.requires_major_version_%d,\n" " current_runtime_version.requires_minor_version_%d,\n" " current_runtime_version.requires_patch_level_%d," " current_runtime_version.requires_runtime_%d);\n", + split_to_slices ? "" : "static ", TTCN3_MAJOR, TTCN3_MINOR, TTCN3_PATCHLEVEL, use_runtime_2 ? 2 : 1 ); + if (split_to_slices) { + output->header.global_vars = mputprintf(output->header.global_vars, + "extern const RuntimeVersionChecker ver_checker;\n"); + } if (tcov_enabled) { output->source.global_vars = mputprintf(output->source.global_vars, - "\nstatic const int effective_module_lines[] = { %s };\n" \ - "static const char *effective_module_functions[] = { %s };\n", + "\n%sconst int effective_module_lines[] = { %s };\n" \ + "%sconst char *effective_module_functions[] = { %s };\n", + split_to_slices ? "" : "static ", effective_module_lines ? static_cast<const char *>(effective_module_lines) : "", + split_to_slices ? "" : "static ", effective_module_functions ? static_cast<const char *>(effective_module_functions) : ""); + if (split_to_slices) { + output->header.global_vars = mputprintf(output->header.global_vars, + "extern const int effective_module_lines[];\n" \ + "extern const char *effective_module_functions[];\n"); + } } } @@ -1545,20 +1643,27 @@ namespace Common { cgh.add_module(modid->get_name(), modid->get_ttcnname(), moduletype == MOD_TTCN, true); cgh.set_current_module(modid->get_ttcnname()); - + // language specific parts (definitions, imports, etc.) //generate_code_internal(&target); <- needed to pass cgh generate_code_internal(cgh); output_struct* output = cgh.get_current_outputstruct(); + + CodeGenHelper::update_intervals(output); // string literals generate_literals(output); // module level entry points generate_functions(output); + + CodeGenHelper::update_intervals(output); // maybe deeper in generate_functions + // type conversion functions for type compatibility generate_conversion_functions(output); + CodeGenHelper::update_intervals(output); // maybe deeper in conv_funcs + /* generate the initializer function for the TTCN-3 profiler * (this is done at the end of the code generation, to make sure all code * lines have been added to the profiler database) */ @@ -1580,6 +1685,10 @@ namespace Common { } } output->source.global_vars = mputstr(output->source.global_vars, "}\n"); + if (split_to_slices) { + output->header.global_vars = mputstr(output->header.global_vars, + "extern void init_ttcn3_profiler();\n"); + } } /* TTCN-3 debugger: generate the printing function for the types defined in this module diff --git a/compiler2/Code.cc b/compiler2/Code.cc index 074fdc878..feac7577b 100644 --- a/compiler2/Code.cc +++ b/compiler2/Code.cc @@ -12,12 +12,14 @@ * Forstner, Matyas * Kovacs, Ferenc * Raduly, Csaba + * Szabo, Bence Janos * Szabo, Janos Zoltan – initial implementation * ******************************************************************************/ #include "Code.hh" #include "../common/memory.h" #include "error.h" +#include "CodeGenHelper.hh" #include <ctype.h> @@ -54,6 +56,31 @@ namespace Common { output->functions.init_comp = NULL; output->functions.start = NULL; output->functions.control = NULL; + output->intervals.pre_things_size = 0; + output->intervals.methods_size = 0; + output->intervals.function_bodies_size = 0; + output->intervals.static_conversion_function_bodies_size = 0; + output->intervals.static_function_bodies_size = 0; + output->intervals.methods_max_size = 1; + output->intervals.function_bodies_max_size = 1; + output->intervals.static_conversion_function_bodies_max_size = 1; + output->intervals.static_function_bodies_max_size = 1; + if (CodeGenHelper::GetInstance().get_split_mode() == CodeGenHelper::SPLIT_TO_SLICES) { + output->intervals.methods = (size_t*)Malloc(output->intervals.methods_max_size * sizeof(size_t)); + output->intervals.function_bodies = (size_t*)Malloc(output->intervals.function_bodies_max_size * sizeof(size_t)); + output->intervals.static_conversion_function_bodies = (size_t*)Malloc(output->intervals.static_conversion_function_bodies_max_size * sizeof(size_t)); + output->intervals.static_function_bodies = (size_t*)Malloc(output->intervals.static_function_bodies_max_size * sizeof(size_t)); + + output->intervals.methods[0] = 0; + output->intervals.function_bodies[0] = 0; + output->intervals.static_conversion_function_bodies[0] = 0; + output->intervals.static_function_bodies[0] = 0; + } else { + output->intervals.methods = NULL; + output->intervals.function_bodies = NULL; + output->intervals.static_conversion_function_bodies = NULL; + output->intervals.static_function_bodies = NULL; + } } void Code::merge_output(output_struct *dest, output_struct *src) @@ -142,6 +169,10 @@ namespace Common { Free(output->functions.init_comp); Free(output->functions.start); Free(output->functions.control); + Free(output->intervals.methods); + Free(output->intervals.function_bodies); + Free(output->intervals.static_conversion_function_bodies); + Free(output->intervals.static_function_bodies); init_output(output); } diff --git a/compiler2/CodeGenHelper.cc b/compiler2/CodeGenHelper.cc index 772c5d542..5461368e9 100644 --- a/compiler2/CodeGenHelper.cc +++ b/compiler2/CodeGenHelper.cc @@ -9,6 +9,7 @@ * Balasko, Jeno * Baranyi, Botond * Raduly, Csaba + * Szabo, Bence Janos * Zalanyi, Balazs Andor * ******************************************************************************/ @@ -20,7 +21,7 @@ #include <cstring> namespace Common { - + CodeGenHelper* CodeGenHelper::instance = 0; CodeGenHelper::generated_output_t::generated_output_t() : @@ -100,7 +101,8 @@ const char* const CodeGenHelper::typetypemap[] = { }; CodeGenHelper::CodeGenHelper() : - split_mode(SPLIT_NONE) + split_mode(SPLIT_NONE), + slice_num(1) { if (instance != 0) FATAL_ERROR("Attempted to create a second code generator."); @@ -115,14 +117,38 @@ CodeGenHelper& CodeGenHelper::GetInstance() { void CodeGenHelper::set_split_mode(split_type st) { split_mode = st; + + if (split_mode == SPLIT_TO_SLICES) { + split_to_slices = true; + } else { + split_to_slices = false; + } } bool CodeGenHelper::set_split_mode(const char* type) { - if (strcmp(type, "none") == 0) + int n; + if (strcmp(type, "none") == 0) { split_mode = SPLIT_NONE; - else if (strcmp(type, "type") == 0) + split_to_slices = false; + } else if (strcmp(type, "type") == 0) { split_mode = SPLIT_BY_KIND; - else + split_to_slices = false; + } else if ((n = atoi(type))) { + size_t length = strlen(type); + for (int i=0;i<length; i++) { + if (!isdigit(type[i])) { + ERROR("The number argument of -U must be a valid number."); + break; + } + } + split_mode = SPLIT_TO_SLICES; + if (n < 1 || n > 999999) { + ERROR("The number argument of -U must be between 1 and 999999."); + return false; + } + slice_num = n; + split_to_slices = slice_num > 1; // slice_num == 1 has no effect + } else return false; return true; } @@ -155,6 +181,128 @@ void CodeGenHelper::set_current_module(const string& name) { current_module = name; } +void CodeGenHelper::update_intervals(output_struct* const output) { + if(instance->split_mode != SPLIT_TO_SLICES) return; + + size_t tmp; + + // 1. check if some characters are added to the charstring + // 2. increment size variable + // 3. if size is bigger than the array's size, then double the array size + // 4. store new end position + + // class_defs are not counted as they will be in the header + tmp = mstrlen(output->source.function_bodies); + if (output->intervals.function_bodies[output->intervals.function_bodies_size] < tmp) { + output->intervals.function_bodies_size++; + if (output->intervals.function_bodies_size > output->intervals.function_bodies_max_size) { + output->intervals.function_bodies_max_size *= 2; + output->intervals.function_bodies = (size_t*)Realloc(output->intervals.function_bodies, output->intervals.function_bodies_max_size * sizeof(size_t)); + } + output->intervals.function_bodies[output->intervals.function_bodies_size] = tmp; + } + tmp = mstrlen(output->source.methods); + if (output->intervals.methods[output->intervals.methods_size] < tmp) { + output->intervals.methods_size++; + if (output->intervals.methods_size > output->intervals.methods_max_size) { + output->intervals.methods_max_size *= 2; + output->intervals.methods = (size_t*)Realloc(output->intervals.methods, output->intervals.methods_max_size * sizeof(size_t)); + } + output->intervals.methods[output->intervals.methods_size] = tmp; + } + tmp = mstrlen(output->source.static_conversion_function_bodies); + if (output->intervals.static_conversion_function_bodies[output->intervals.static_conversion_function_bodies_size] < tmp) { + output->intervals.static_conversion_function_bodies_size++; + if (output->intervals.static_conversion_function_bodies_size > output->intervals.static_conversion_function_bodies_max_size) { + output->intervals.static_conversion_function_bodies_max_size *= 2; + output->intervals.static_conversion_function_bodies = (size_t*)Realloc(output->intervals.static_conversion_function_bodies, output->intervals.static_conversion_function_bodies_max_size * sizeof(size_t)); + } + output->intervals.static_conversion_function_bodies[output->intervals.static_conversion_function_bodies_size] = tmp; + } + tmp = mstrlen(output->source.static_function_bodies); + if (output->intervals.static_function_bodies[output->intervals.static_function_bodies_size] < tmp) { + output->intervals.static_function_bodies_size++; + if (output->intervals.static_function_bodies_size > output->intervals.static_function_bodies_max_size) { + output->intervals.static_function_bodies_max_size *= 2; + output->intervals.static_function_bodies = (size_t*)Realloc(output->intervals.static_function_bodies, output->intervals.static_function_bodies_max_size * sizeof(size_t)); + } + output->intervals.static_function_bodies[output->intervals.static_function_bodies_size] = tmp; + } +} +//Advised to call update_intervals before this +size_t CodeGenHelper::size_of_sources(output_struct * const output) { + size_t size = 0; + // Calculate global var and string literals size + output->intervals.pre_things_size = mstrlen(output->source.global_vars) + mstrlen(output->source.string_literals); + + // Class_defs, static_conversion_function_prototypes, static_function_prototypes are in the header, + // and includes are not counted + size = output->intervals.pre_things_size + + output->intervals.function_bodies[output->intervals.function_bodies_size] + + output->intervals.methods[output->intervals.methods_size] + + output->intervals.static_conversion_function_bodies[output->intervals.static_conversion_function_bodies_size] + + output->intervals.static_function_bodies[output->intervals.static_function_bodies_size]; + return size; +} + +size_t CodeGenHelper::get_next_chunk_pos(const output_struct * const from, output_struct * const to, const size_t base_pos, const size_t chunk_size) { + size_t pos = 0; // Holds the position from the beginning + + pos += from->intervals.pre_things_size; + + if (pos > base_pos) { + to->source.global_vars = mputstr(to->source.global_vars, from->source.global_vars); + to->source.string_literals = mputstr(to->source.string_literals, from->source.string_literals); + } + + get_chunk_from_poslist(from->source.methods, to->source.methods, from->intervals.methods, from->intervals.methods_size, base_pos, chunk_size, pos); + get_chunk_from_poslist(from->source.function_bodies, to->source.function_bodies, from->intervals.function_bodies, from->intervals.function_bodies_size, base_pos, chunk_size, pos); + get_chunk_from_poslist(from->source.static_function_bodies, to->source.static_function_bodies, from->intervals.static_function_bodies, from->intervals.static_function_bodies_size, base_pos, chunk_size, pos); + get_chunk_from_poslist(from->source.static_conversion_function_bodies, to->source.static_conversion_function_bodies, from->intervals.static_conversion_function_bodies, from->intervals.static_conversion_function_bodies_size, base_pos, chunk_size, pos); + + return pos; +} +//if from null return. +void CodeGenHelper::get_chunk_from_poslist(const char* from, char *& to, const size_t interval_array[], const size_t interval_array_size, const size_t base_pos, const size_t chunk_size, size_t& pos) { + if (from == NULL) return; + // If we have enough to form a chunk + + // pos is unsigned so it can't be negative + if (pos > base_pos && pos - base_pos >= chunk_size) return; + + size_t tmp = pos; + + pos += interval_array[interval_array_size]; + + if (pos > base_pos) { // If we haven't finished with this interval_array + if (pos - base_pos >= chunk_size) { // It is a good chunk, but make it more precise because it may be too big + int ind = 0; + for (int i = 0; i <= interval_array_size; i++) { + if (tmp + interval_array[i] <= base_pos) { // Find the pos where we left off + ind = i; + } else if (tmp + interval_array[i] - base_pos >= chunk_size) { + // Found the first optimal position that is a good chunk + to = mputstrn(to, from + interval_array[ind], interval_array[i] - interval_array[ind]); + pos = tmp + interval_array[i]; + return; + } + } + } else { // We can't form a new chunk from the remaining characters + int ind = 0; + for (int i = 0; i <= interval_array_size; i++) { + if (tmp + interval_array[i] <= base_pos) { + ind = i; + } else { + break; + } + } + // Put the remaining characters + to = mputstrn(to, from + interval_array[ind], interval_array[interval_array_size] - interval_array[ind]); + pos = tmp + interval_array[interval_array_size]; + } + } +} + output_struct* CodeGenHelper::get_outputstruct(Ttcn::Definition* def) { string key = get_key(*def); const string& new_name = current_module + key; @@ -237,6 +385,8 @@ string CodeGenHelper::get_key(Ttcn::Definition& def) const { break; case SPLIT_BY_HEURISTICS: break; + case SPLIT_TO_SLICES: + break; } return retval; } @@ -268,6 +418,8 @@ string CodeGenHelper::get_key(Type& type) const { break; case SPLIT_BY_HEURISTICS: break; + case SPLIT_TO_SLICES: + break; } return retval; } @@ -286,12 +438,123 @@ void CodeGenHelper::write_output() { go->modulename = modules[j]->name; go->module_dispname = modules[j]->dispname; go->os.source.includes = mcopystr( - "\n//This file intentionally empty." + "\n//This file is intentionally empty." "\n#include <version.h>\n"); generated_code.add(fname, go); } } } + } else if (split_mode == SPLIT_TO_SLICES && slice_num > 0) { + // The strategy is the following: + // Goal: Get files with equal size + // Get the longest file's length and divide it by slice_num (chunk_size) + // We split every file to chunk_size sized chunks + size_t max = 0; + // Calculate maximum character length + for (j = 0; j < generated_code.size(); j++) { + update_intervals(&generated_code.get_nth_elem(j)->os); + size_t num_of_chars = size_of_sources(&generated_code.get_nth_elem(j)->os); + if (max < num_of_chars) { + max = num_of_chars; + } + } + // Calculate ideal chunk size + size_t chunk_size = max / slice_num; + string fname; + for (j = 0; j < modules.size(); j++) { + generated_output_t *output = generated_code[modules[j]->dispname]; + + // Just to be sure that everything is in the right place + update_intervals(&output->os); + + // Move static function prototypes to header (no longer static) + output->os.header.function_prototypes = mputstr(output->os.header.function_prototypes, output->os.source.static_function_prototypes); + Free(output->os.source.static_function_prototypes); + output->os.source.static_function_prototypes = NULL; + + output->os.header.function_prototypes = mputstr(output->os.header.function_prototypes, output->os.source.static_conversion_function_prototypes); + Free(output->os.source.static_conversion_function_prototypes); + output->os.source.static_conversion_function_prototypes = NULL; + + // Move internal class definitions to the header + output->os.header.class_defs = mputstr(output->os.header.class_defs, output->os.source.class_defs); + Free(output->os.source.class_defs); + output->os.source.class_defs = NULL; + + update_intervals(&output->os); + size_t num_of_chars = size_of_sources(&output->os); + char buffer[13]= ""; // Max is 999999 should be enough (checked in main.cc) | 6 digit + 2 underscore + part + // If we need to split + if (num_of_chars >= chunk_size) { + size_t base_pos = 0; + for (unsigned int i = 0; i < slice_num; i++) { + if (i == 0) { // The first slice has the module's name + fname = output->module_dispname; + } else { + sprintf(buffer, "_part_%d", (int)i); + fname = output->module_dispname + "_" + buffer; + } + if (i == 0 || !generated_code.has_key(fname)) { + generated_output_t* go = new generated_output_t; + go->filename = buffer; + go->modulename = output->modulename; + go->module_dispname = output->module_dispname; + size_t act_pos = get_next_chunk_pos(&output->os, &go->os, base_pos, chunk_size); + // True if the file is not empty + if (act_pos > base_pos) { + go->os.source.includes = mputstr(go->os.source.includes, output->os.source.includes); + } else { + go->os.source.includes = mcopystr( + "\n//This file is intentionally empty." + "\n#include <version.h>\n"); + } + // First slice: copy header and other properties and replace the original output struct + if (i == 0) { + go->has_circular_import = output->has_circular_import; + go->is_module = output->is_module; + go->is_ttcn = output->is_ttcn; + go->os.header.class_decls = mputstr(go->os.header.class_decls, output->os.header.class_decls); + go->os.header.class_defs = mputstr(go->os.header.class_defs, output->os.header.class_defs); + go->os.header.function_prototypes = mputstr(go->os.header.function_prototypes, output->os.header.function_prototypes); + go->os.header.global_vars = mputstr(go->os.header.global_vars, output->os.header.global_vars); + go->os.header.includes = mputstr(go->os.header.includes, output->os.header.includes); + go->os.header.testport_includes = mputstr(go->os.header.testport_includes, output->os.header.testport_includes); + go->os.header.typedefs = mputstr(go->os.header.typedefs, output->os.header.typedefs); + generated_code[modules[j]->dispname] = go; + } else { + generated_code.add(fname, go); + } + base_pos = act_pos; + } else { + // TODO: error handling: there is a module which has the same name as the + // numbered splitted file. splitting by type does not have this error + // handling so don't we + } + } + // Extra safety. If something is missing after the splitting, put the remaining + // things to the last file. (Should never happen) + if (base_pos < num_of_chars) { + get_next_chunk_pos(&output->os, &generated_code[fname]->os, base_pos, num_of_chars); + } + delete output; + } else { + // Create empty files. + for (i = 1; i < slice_num; i++) { + sprintf(buffer, "_part_%d", (int)i); + fname = output->module_dispname + "_" + buffer; + if (!generated_code.has_key(fname)) { + generated_output_t* go = new generated_output_t; + go->filename = buffer; + go->modulename = modules[j]->name; + go->module_dispname = modules[j]->dispname; + go->os.source.includes = mcopystr( + "\n//This file is intentionally empty." + "\n#include <version.h>\n"); + generated_code.add(fname, go); + } + } + } + } } generated_output_t* go; for (i = 0; i < generated_code.size(); i++) { diff --git a/compiler2/CodeGenHelper.hh b/compiler2/CodeGenHelper.hh index e11ff0b3f..97ba724e7 100644 --- a/compiler2/CodeGenHelper.hh +++ b/compiler2/CodeGenHelper.hh @@ -8,6 +8,7 @@ * Contributors: * Balasko, Jeno * Raduly, Csaba + * Szabo, Bence Janos * Zalanyi, Balazs Andor * ******************************************************************************/ @@ -26,14 +27,15 @@ class Definition; } namespace Common { - + class CodeGenHelper { public: enum split_type { SPLIT_NONE, ///< original code generation SPLIT_BY_KIND, ///< place different kind of types in their own file SPLIT_BY_NAME, ///< place all definitions/assignments in their own file - SPLIT_BY_HEURISTICS ///< heuristic function will decide the structure + SPLIT_BY_HEURISTICS,///< heuristic function will decide the structure + SPLIT_TO_SLICES ///< split large files into smaller ones }; private: @@ -57,6 +59,7 @@ private: output_map_t generated_code; split_type split_mode; + unsigned int slice_num; struct module_names_t { string name; @@ -86,6 +89,14 @@ public: void finalize_generation(Type* type); void set_current_module(const string& name); + + static void update_intervals(output_struct* const output); + + size_t size_of_sources(output_struct * const output); + + size_t get_next_chunk_pos(const output_struct * const from, output_struct * const to, const size_t base_pos, const size_t chunk_size); + + void get_chunk_from_poslist(const char* from, char *& to, const size_t interval_array[], const size_t interval_array_size, const size_t base_pos, const size_t chunk_size, size_t& pos); void write_output(); diff --git a/compiler2/TypeCompat.cc b/compiler2/TypeCompat.cc index 6f4695b1f..886c211ee 100644 --- a/compiler2/TypeCompat.cc +++ b/compiler2/TypeCompat.cc @@ -8,6 +8,7 @@ * Contributors: * Balasko, Jeno * Raduly, Csaba + * Szabo, Bence Janos * ******************************************************************************/ #include "TypeCompat.hh" @@ -323,12 +324,12 @@ void TypeConv::gen_conv_func(char **p_prototypes, char **p_bodies, string to_name = m_is_temp ? m_to->get_genname_template(p_mod) : m_to->get_genname_value(p_mod); *p_prototypes = mputprintf(*p_prototypes, - "static boolean %s(%s& p_to_v, const %s& p_from_v);\n", - get_conv_func(m_from, m_to, p_mod).c_str(), to_name.c_str(), + "%sboolean %s(%s& p_to_v, const %s& p_from_v);\n", + split_to_slices ? "" : "static ", get_conv_func(m_from, m_to, p_mod).c_str(), to_name.c_str(), from_name.c_str()); *p_bodies = mputprintf(*p_bodies, - "static boolean %s(%s& p_to_v, const %s& p_from_v)\n{\n", - get_conv_func(m_from, m_to, p_mod).c_str(), to_name.c_str(), + "%sboolean %s(%s& p_to_v, const %s& p_from_v)\n{\n", + split_to_slices ? "" : "static ", get_conv_func(m_from, m_to, p_mod).c_str(), to_name.c_str(), from_name.c_str()); switch (m_to->get_typetype()) { case Type::T_SEQ_A: diff --git a/compiler2/Type_codegen.cc b/compiler2/Type_codegen.cc index 530c2e837..3acf33af6 100644 --- a/compiler2/Type_codegen.cc +++ b/compiler2/Type_codegen.cc @@ -12,6 +12,7 @@ * Delic, Adam * Raduly, Csaba * Szabados, Kristof + * Szabo, Bence Janos * Pandi, Krisztian * ******************************************************************************/ @@ -53,6 +54,7 @@ void Type::generate_code(output_struct *target) { if (code_generated) return; generate_code_embedded_before(target); + CodeGenHelper::update_intervals(target); // TODO: class and template separate everywhere? // escape from recursion loops if (code_generated) return; code_generated = true; @@ -101,11 +103,14 @@ void Type::generate_code(output_struct *target) break; } // switch } + CodeGenHelper::update_intervals(target); generate_code_embedded_after(target); + CodeGenHelper::update_intervals(target); if (!is_asn1()) { if (has_done_attribute()) generate_code_done(target); if (sub_type) sub_type->generate_code(*target); } + CodeGenHelper::update_intervals(target); } void Type::generate_code_include(const string& sourcefile, output_struct *target) @@ -434,8 +439,8 @@ void Type::generate_code_typedescriptor(output_struct *target) void Type::generate_code_berdescriptor(output_struct *target) { const char *gennameown_str = get_genname_own().c_str(); - char *str = mprintf("static const ASN_Tag_t %s_tag_[] = { ", - gennameown_str); + char *str = mprintf("%sconst ASN_Tag_t %s_tag_[] = { ", + split_to_slices ? "" : "static ", gennameown_str); Tags *joinedtags = build_tags_joined(); size_t tagarraysize = joinedtags->get_nof_tags(); for (size_t i = 0; i < tagarraysize; i++) { @@ -720,7 +725,11 @@ void Type::generate_code_textdescriptor(output_struct *target) case T_BOOL: if (textattrib->true_params || textattrib->false_params) { target->source.global_vars = mputprintf(target->source.global_vars, - "static const TTCN_TEXTdescriptor_bool %s_bool_ = {", gennameown_str); + "%sconst TTCN_TEXTdescriptor_bool %s_bool_ = {", split_to_slices ? "" : "static ", gennameown_str); + if (split_to_slices) { + target->header.global_vars = mputprintf(target->header.global_vars, + "extern const TTCN_TEXTdescriptor_bool %s_bool_;\n", gennameown_str); + } if (textattrib->true_params && textattrib->true_params->encode_token) { target->source.global_vars = mputprintf(target->source.global_vars, @@ -779,8 +788,12 @@ void Type::generate_code_textdescriptor(output_struct *target) break; case T_ENUM_T: target->source.global_vars = mputprintf(target->source.global_vars, - "static const TTCN_TEXTdescriptor_enum %s_enum_[] = { ", - gennameown_str); + "%sconst TTCN_TEXTdescriptor_enum %s_enum_[] = { ", + split_to_slices ? "" : "static ", gennameown_str); + if (split_to_slices) { + target->header.global_vars = mputprintf(target->header.global_vars, + "extern const TTCN_TEXTdescriptor_enum %s_enum_[];\n", gennameown_str); + } for (size_t i = 0; i < t->u.enums.eis->get_nof_eis(); i++) { if (i > 0) target->source.global_vars = mputstr(target->source.global_vars, ", "); @@ -845,8 +858,12 @@ void Type::generate_code_textdescriptor(output_struct *target) textattrib->decoding_params.convert!=0 || textattrib->decoding_params.just!=1 ){ target->source.global_vars=mputprintf(target->source.global_vars, - "static const TTCN_TEXTdescriptor_param_values %s_par_ = {", - gennameown_str); + "%sconst TTCN_TEXTdescriptor_param_values %s_par_ = {", + split_to_slices ? "" : "static ", gennameown_str); + if (split_to_slices) { + target->header.global_vars=mputprintf(target->header.global_vars, + "extern const TTCN_TEXTdescriptor_param_values %s_par_;\n", gennameown_str); + } target->source.global_vars=mputprintf(target->source.global_vars, "{%s,%s,%i,%i,%i,%i},{%s,%s,%i,%i,%i,%i}};\n" ,textattrib->coding_params.leading_zero?"true":"false" @@ -868,8 +885,12 @@ void Type::generate_code_textdescriptor(output_struct *target) case T_SEQOF: case T_SETOF: target->source.global_vars=mputprintf(target->source.global_vars, - "static const TTCN_TEXTdescriptor_param_values %s_par_ = {", - gennameown_str); + "%sconst TTCN_TEXTdescriptor_param_values %s_par_ = {", + split_to_slices ? "" : "static ", gennameown_str); + if (split_to_slices) { + target->header.global_vars=mputprintf(target->header.global_vars, + "extern const TTCN_TEXTdescriptor_param_values %s_par_;\n", gennameown_str); + } target->source.global_vars=mputprintf(target->source.global_vars, "{%s,%s,%i,%i,%i,%i},{%s,%s,%i,%i,%i,%i}};\n" ,textattrib->coding_params.leading_zero?"true":"false" @@ -2040,7 +2061,7 @@ void Type::generate_code_Array(output_struct *target) "};\n\n", own_name, u.array.dimension->get_value_type(u.array.element_type, my_scope).c_str()); - target->source.class_defs = mputprintf(target->source.class_defs, + target->source.methods = mputprintf(target->source.methods, "const TTCN_Typedescriptor_t* %s::get_elem_descr() const { return &%s_descr_; }\n\n", own_name, u.array.element_type->get_genname_typedescriptor(my_scope).c_str()); } else { @@ -2696,8 +2717,11 @@ void Type::generate_code_object(const_def *cdef, Scope *p_scope, if (prefix) { cdef->decl = mputprintf(cdef->decl, "extern const %s& %s;\n", type_name_str, name_str); - cdef->def = mputprintf(cdef->def, "static %s %s%s;\n" - "const %s& %s = %s%s;\n", type_name_str, prefix, name_str, + if (split_to_slices) { + cdef->decl = mputprintf(cdef->decl, "extern %s %s%s;\n", type_name_str, prefix, name_str); + } + cdef->def = mputprintf(cdef->def, "%s%s %s%s;\n" + "const %s& %s = %s%s;\n", split_to_slices ? "" : "static ", type_name_str, prefix, name_str, type_name_str, name_str, prefix, name_str); } else { cdef->decl = mputprintf(cdef->decl, "extern %s %s;\n", @@ -2720,8 +2744,8 @@ void Type::generate_code_object(const_def *cdef, GovernedSimple *p_setting) FATAL_ERROR("Type::generate_code_object()"); } if (p_setting->get_err_descr()) { - cdef->def = p_setting->get_err_descr()->generate_code_str(cdef->def, - p_setting->get_genname_prefix() + p_setting->get_genname_own()); + cdef->def = p_setting->get_err_descr()->generate_code_str(cdef->def, cdef->decl, + p_setting->get_genname_prefix() + p_setting->get_genname_own(), false); } generate_code_object(cdef, p_setting->get_my_scope(), p_setting->get_genname_own(), p_setting->get_genname_prefix(), diff --git a/compiler2/asn1/AST_asn1.cc b/compiler2/asn1/AST_asn1.cc index f2086da71..ee5920fbc 100644 --- a/compiler2/asn1/AST_asn1.cc +++ b/compiler2/asn1/AST_asn1.cc @@ -13,6 +13,7 @@ * Kovacs, Ferenc * Raduly, Csaba * Szabados, Kristof + * Szabo, Bence Janos * Szalai, Gabor * Zalanyi, Balazs Andor * Pandi, Krisztian @@ -921,7 +922,10 @@ namespace Asn { void Assignments::generate_code(CodeGenHelper& cgh) { for (size_t i = 0; i < asss_v.size(); i++) { Assignment *ass = asss_v[i]; - if (!top_level_pdu || ass->get_checked()) ass->generate_code(cgh); + if (!top_level_pdu || ass->get_checked()) { + ass->generate_code(cgh); + CodeGenHelper::update_intervals(cgh.get_current_outputstruct()); + } } } @@ -1400,6 +1404,7 @@ namespace Asn { if (ass_pard || dontgen) return; classify_ass(); ass->generate_code(cgh); + CodeGenHelper::update_intervals(cgh.get_current_outputstruct()); } void Ass_Undef::dump(unsigned level) const diff --git a/compiler2/compiler.1 b/compiler2/compiler.1 index 8c0e3467b..dc103acd6 100644 --- a/compiler2/compiler.1 +++ b/compiler2/compiler.1 @@ -17,7 +17,7 @@ compiler \- TTCN-3 and ASN.1 to C++ translator .RB "[\| " \-Q .IR "n" " \|] " .RB "[\| " \-U -.IR "none|type" " \|] " +.IR "none|type|'number'" " \|] " .RB "[\| " \-T " \|]" module.ttcn ... .RB "[\| " \-A " \|]" @@ -262,8 +262,10 @@ Forces the compiler to do characters in all output file names. This option turns on the compatibility mode with versions 1.1 or earlier. .TP -.BI \-U " none|type" +.BI \-U " none|type|'number'" Selects code splitting mode for the generated C++ code. +The 'number' should be a positive number between 1 and 999999. +If the 'number' is present the files will be sliced into 'number' files. .TP .B \-v Prints diff --git a/compiler2/main.cc b/compiler2/main.cc index f01d98e2e..f6ad7efcf 100644 --- a/compiler2/main.cc +++ b/compiler2/main.cc @@ -95,7 +95,7 @@ boolean generate_skeleton = FALSE, force_overwrite = FALSE, implicit_json_encoding = FALSE, json_refs_for_all_types = TRUE, force_gen_seof = FALSE, omit_in_value_list = FALSE, warnings_for_bad_variants = FALSE, debugger_active = FALSE, - legacy_unbound_union_fields = FALSE; + legacy_unbound_union_fields = FALSE, split_to_slices = FALSE; // Default code splitting mode is set to 'no splitting'. CodeGenHelper::split_type code_splitting_mode = CodeGenHelper::SPLIT_NONE; @@ -385,7 +385,7 @@ static void usage() { fprintf(stderr, "\n" "usage: %s [-abcdEfgijlLMnOpqrRsStuwxXyY] [-K file] [-z file] [-V verb_level]\n" - " [-o dir] [-U none|type] [-P modulename.top_level_pdu_name] [-Q number] ...\n" + " [-o dir] [-U none|type|'number'] [-P modulename.top_level_pdu_name] [-Q number] ...\n" " [-T] module.ttcn [-A] module.asn ...\n" " or %s -v\n" " or %s --ttcn2json [-jf] ... [-T] module.ttcn [-A] module.asn ... [- schema.json]\n" @@ -417,7 +417,7 @@ static void usage() " -S: suppress context information\n" " -t: generate Test Port skeleton\n" " -u: duplicate underscores in file names\n" - " -U none|type: select code splitting mode for the generated C++ code\n" + " -U none|type|'number': select code splitting mode for the generated C++ code\n" " -V verb_level: set verbosity level bitmask (decimal)\n" " -w: suppress warnings\n" " -x: disable TEXT encoder/decoder functions\n" @@ -483,7 +483,7 @@ int main(int argc, char *argv[]) s0flag = false, Cflag = false, yflag = false, Uflag = false, Qflag = false, Sflag = false, Kflag = false, jflag = false, zflag = false, Fflag = false, Mflag = false, Eflag = false, nflag = false, Bflag = false, errflag = false, - print_usage = false, ttcn2json = false; + print_usage = false, ttcn2json = false; CodeGenHelper cgh; @@ -702,10 +702,10 @@ int main(int argc, char *argv[]) SET_FLAG(U); if (!cgh.set_split_mode(optarg)) { ERROR("Wrong code splitting option: '%s'. Valid values are: 'none', " - "'type'.", optarg); + "'type', or a positive number.", optarg); errflag = true; } - break; + break; case 'v': SET_FLAG(v); break; diff --git a/compiler2/main.hh b/compiler2/main.hh index f9d554259..4bdb932e3 100644 --- a/compiler2/main.hh +++ b/compiler2/main.hh @@ -15,6 +15,7 @@ * Kremer, Peter * Raduly, Csaba * Szabados, Kristof + * Szabo, Bence Janos * Szabo, Janos Zoltan – initial implementation * ******************************************************************************/ @@ -50,7 +51,7 @@ extern boolean generate_skeleton, force_overwrite, include_line_info, check_subtype, suppress_context, enable_set_bound_out_param, display_up_to_date, implicit_json_encoding, json_refs_for_all_types, force_gen_seof, omit_in_value_list, warnings_for_bad_variants, debugger_active, - legacy_unbound_union_fields; + legacy_unbound_union_fields, split_to_slices; extern const char *expected_platform; diff --git a/compiler2/makefile.c b/compiler2/makefile.c index 7bc8854ec..629c5ec70 100644 --- a/compiler2/makefile.c +++ b/compiler2/makefile.c @@ -1675,14 +1675,21 @@ static void print_shared_object_name(FILE *fp, const struct user_struct *user) } /** Prints the splitted files' names for a given module. */ static void print_splitted_file_names(FILE *fp, - const struct makefile_struct *makefile, const struct module_struct *module) + const struct makefile_struct *makefile, const struct module_struct *module, const boolean dir) { + int n_slices; if (strcmp(makefile->code_splitting_mode, "-U type") == 0) { - print_generated_file_name(fp, module, FALSE, "_seq.cc"); - print_generated_file_name(fp, module, FALSE, "_set.cc"); - print_generated_file_name(fp, module, FALSE, "_seqof.cc"); - print_generated_file_name(fp, module, FALSE, "_setof.cc"); - print_generated_file_name(fp, module, FALSE, "_union.cc"); + print_generated_file_name(fp, module, dir, "_seq.cc"); + print_generated_file_name(fp, module, dir, "_set.cc"); + print_generated_file_name(fp, module, dir, "_seqof.cc"); + print_generated_file_name(fp, module, dir, "_setof.cc"); + print_generated_file_name(fp, module, dir, "_union.cc"); + } else if(makefile->code_splitting_mode != NULL && (n_slices = atoi(makefile->code_splitting_mode + 2))) { + for (int i = 1; i < n_slices; i++) { + char buffer[16]; // 6 digits + 4 chars + _part + sprintf(buffer, "_part_%i.cc", i); + print_generated_file_name(fp, module, dir, buffer); + } } } @@ -2267,7 +2274,7 @@ static void print_makefile(struct makefile_struct *makefile) for (i = 0; i < makefile->nTTCN3Modules; i++) { const struct module_struct *module = makefile->TTCN3Modules + i; if (module->dir_name == NULL || !makefile->central_storage) - print_splitted_file_names(fp, makefile, module); + print_splitted_file_names(fp, makefile, module, FALSE); } } if (makefile->preprocess) { @@ -2276,7 +2283,7 @@ static void print_makefile(struct makefile_struct *makefile) for (i = 0; i < makefile->nTTCN3PPModules; i++) { const struct module_struct *module = makefile->TTCN3PPModules + i; if (module->dir_name == NULL || !makefile->central_storage) - print_splitted_file_names(fp, makefile, module); + print_splitted_file_names(fp, makefile, module, FALSE); } } } @@ -2286,7 +2293,7 @@ static void print_makefile(struct makefile_struct *makefile) if (module->dir_name == NULL || !makefile->central_storage) { print_generated_file_name(fp, module, FALSE, ".cc"); if (makefile->code_splitting_mode) - print_splitted_file_names(fp, makefile, module); + print_splitted_file_names(fp, makefile, module, FALSE); } } if (makefile->preprocess) { @@ -2295,7 +2302,7 @@ static void print_makefile(struct makefile_struct *makefile) if (module->dir_name == NULL || !makefile->central_storage) { print_generated_file_name(fp, module, FALSE, ".cc"); if (makefile->code_splitting_mode) - print_splitted_file_names(fp, makefile, module); + print_splitted_file_names(fp, makefile, module, FALSE); } } } @@ -2306,7 +2313,7 @@ static void print_makefile(struct makefile_struct *makefile) for (i = 0; i < makefile->nASN1Modules; i++) { const struct module_struct *module = makefile->ASN1Modules + i; if (module->dir_name == NULL || !makefile->central_storage) { - print_splitted_file_names(fp, makefile, module); + print_splitted_file_names(fp, makefile, module, FALSE); } } } @@ -2316,7 +2323,7 @@ static void print_makefile(struct makefile_struct *makefile) if (module->dir_name == NULL || !makefile->central_storage) { print_generated_file_name(fp, module, FALSE, ".cc"); if (makefile->code_splitting_mode) - print_splitted_file_names(fp, makefile, module); + print_splitted_file_names(fp, makefile, module, FALSE); } } } @@ -2356,7 +2363,7 @@ static void print_makefile(struct makefile_struct *makefile) for (i = 0; i < makefile->nTTCN3Modules; i++) { const struct module_struct *module = makefile->TTCN3Modules + i; if (module->dir_name != NULL) { - print_splitted_file_names(fp, makefile, module); + print_splitted_file_names(fp, makefile, module, TRUE); } } } @@ -2366,7 +2373,7 @@ static void print_makefile(struct makefile_struct *makefile) for (i = 0; i < makefile->nTTCN3PPModules; i++) { const struct module_struct *module = makefile->TTCN3PPModules + i; if (module->dir_name != NULL) { - print_splitted_file_names(fp, makefile, module); + print_splitted_file_names(fp, makefile, module, TRUE); } } } @@ -2377,7 +2384,7 @@ static void print_makefile(struct makefile_struct *makefile) if (module->dir_name != NULL) { print_generated_file_name(fp, module, TRUE, ".cc"); if (makefile->code_splitting_mode) - print_splitted_file_names(fp, makefile, module); + print_splitted_file_names(fp, makefile, module, TRUE); } } if (makefile->preprocess) { @@ -2386,7 +2393,7 @@ static void print_makefile(struct makefile_struct *makefile) if (module->dir_name != NULL) { print_generated_file_name(fp, module, TRUE, ".cc"); if (makefile->code_splitting_mode) - print_splitted_file_names(fp, makefile, module); + print_splitted_file_names(fp, makefile, module, TRUE); } } } @@ -2397,7 +2404,7 @@ static void print_makefile(struct makefile_struct *makefile) for (i = 0; i < makefile->nASN1Modules; i++) { const struct module_struct *module = makefile->ASN1Modules + i; if (module->dir_name != NULL) { - print_splitted_file_names(fp, makefile, module); + print_splitted_file_names(fp, makefile, module, TRUE); } } } @@ -2407,7 +2414,7 @@ static void print_makefile(struct makefile_struct *makefile) if (module->dir_name != NULL) { print_generated_file_name(fp, module, TRUE, ".cc"); if (makefile->code_splitting_mode) - print_splitted_file_names(fp, makefile, module); + print_splitted_file_names(fp, makefile, module, TRUE); } } } @@ -2573,14 +2580,22 @@ static void print_makefile(struct makefile_struct *makefile) const struct module_struct *module = makefile->TTCN3Modules + i; if (module->dir_name == NULL || !makefile->central_storage) { print_generated_file_name(fp, module, FALSE, ".so"); - if (makefile->code_splitting_mode != NULL) + if (makefile->code_splitting_mode != NULL) { + int n_slices; if (strcmp(makefile->code_splitting_mode, "-U type") == 0) { print_generated_file_name(fp, module, FALSE, "_seq.so"); print_generated_file_name(fp, module, FALSE, "_set.so"); print_generated_file_name(fp, module, FALSE, "_seqof.so"); print_generated_file_name(fp, module, FALSE, "_setof.so"); print_generated_file_name(fp, module, FALSE, "_union.so"); + } else if((n_slices = atoi(makefile->code_splitting_mode + 2))) { + for (int i = 1; i < n_slices; i++) { + char buffer[16]; // 6 digits + 4 chars + _part + sprintf(buffer, "_part_%i.so", i); + print_generated_file_name(fp, module, FALSE, buffer); + } } + } } } if (makefile->preprocess) { @@ -2588,14 +2603,22 @@ static void print_makefile(struct makefile_struct *makefile) const struct module_struct *module = makefile->TTCN3PPModules + i; if (module->dir_name == NULL || !makefile->central_storage) { print_generated_file_name(fp, module, FALSE, ".so"); - if (makefile->code_splitting_mode != NULL) + if (makefile->code_splitting_mode != NULL) { + int n_slices; if (strcmp(makefile->code_splitting_mode, "-U type") == 0) { print_generated_file_name(fp, module, FALSE, "_seq.so"); print_generated_file_name(fp, module, FALSE, "_set.so"); print_generated_file_name(fp, module, FALSE, "_seqof.so"); print_generated_file_name(fp, module, FALSE, "_setof.so"); print_generated_file_name(fp, module, FALSE, "_union.so"); + } else if((n_slices = atoi(makefile->code_splitting_mode + 2))) { + for (int i = 1; i < n_slices; i++) { + char buffer[16]; // 6 digits + 4 chars + _part + sprintf(buffer, "_part_%i.so", i); + print_generated_file_name(fp, module, FALSE, buffer); + } } + } } } } @@ -2603,14 +2626,22 @@ static void print_makefile(struct makefile_struct *makefile) const struct module_struct *module = makefile->ASN1Modules + i; if (module->dir_name == NULL || !makefile->central_storage) { print_generated_file_name(fp, module, FALSE, ".so"); - if (makefile->code_splitting_mode != NULL) + if (makefile->code_splitting_mode != NULL) { + int n_slices; if (strcmp(makefile->code_splitting_mode, "-U type") == 0) { print_generated_file_name(fp, module, FALSE, "_seq.so"); print_generated_file_name(fp, module, FALSE, "_set.so"); print_generated_file_name(fp, module, FALSE, "_seqof.so"); print_generated_file_name(fp, module, FALSE, "_setof.so"); print_generated_file_name(fp, module, FALSE, "_union.so"); + } else if((n_slices = atoi(makefile->code_splitting_mode + 2))) { + for (int i = 1; i < n_slices; i++) { + char buffer[16]; // 6 digits + 4 chars + _part + sprintf(buffer, "_part_%i.so", i); + print_generated_file_name(fp, module, FALSE, buffer); + } } + } } } } @@ -2637,14 +2668,22 @@ static void print_makefile(struct makefile_struct *makefile) const struct module_struct *module = makefile->TTCN3Modules + i; if (module->dir_name == NULL || !makefile->central_storage) { print_generated_file_name(fp, module, FALSE, ".o"); - if (makefile->code_splitting_mode != NULL) + if (makefile->code_splitting_mode != NULL) { + int n_slices; if (strcmp(makefile->code_splitting_mode, "-U type") == 0) { print_generated_file_name(fp, module, FALSE, "_seq.o"); print_generated_file_name(fp, module, FALSE, "_set.o"); print_generated_file_name(fp, module, FALSE, "_seqof.o"); print_generated_file_name(fp, module, FALSE, "_setof.o"); print_generated_file_name(fp, module, FALSE, "_union.o"); + } else if((n_slices = atoi(makefile->code_splitting_mode + 2))) { + for (int i = 1; i < n_slices; i++) { + char buffer[16]; // 6 digits + 4 chars + _part + sprintf(buffer, "_part_%i.o", i); + print_generated_file_name(fp, module, FALSE, buffer); + } } + } } } if (makefile->preprocess) { @@ -2652,14 +2691,22 @@ static void print_makefile(struct makefile_struct *makefile) const struct module_struct *module = makefile->TTCN3PPModules + i; if (module->dir_name == NULL || !makefile->central_storage) { print_generated_file_name(fp, module, FALSE, ".o"); - if (makefile->code_splitting_mode != NULL) + if (makefile->code_splitting_mode != NULL) { + int n_slices; if (strcmp(makefile->code_splitting_mode, "-U type") == 0) { print_generated_file_name(fp, module, FALSE, "_seq.o"); print_generated_file_name(fp, module, FALSE, "_set.o"); print_generated_file_name(fp, module, FALSE, "_seqof.o"); print_generated_file_name(fp, module, FALSE, "_setof.o"); print_generated_file_name(fp, module, FALSE, "_union.o"); + } else if((n_slices = atoi(makefile->code_splitting_mode + 2))) { + for (int i = 1; i < n_slices; i++) { + char buffer[16]; // 6 digits + 4 chars + _part + sprintf(buffer, "_part_%i.o", i); + print_generated_file_name(fp, module, FALSE, buffer); + } } + } } } } @@ -2667,14 +2714,22 @@ static void print_makefile(struct makefile_struct *makefile) const struct module_struct *module = makefile->ASN1Modules + i; if (module->dir_name == NULL || !makefile->central_storage) { print_generated_file_name(fp, module, FALSE, ".o"); - if (makefile->code_splitting_mode != NULL) + if (makefile->code_splitting_mode != NULL) { + int n_slices; if (strcmp(makefile->code_splitting_mode, "-U type") == 0) { print_generated_file_name(fp, module, FALSE, "_seq.o"); print_generated_file_name(fp, module, FALSE, "_set.o"); print_generated_file_name(fp, module, FALSE, "_seqof.o"); print_generated_file_name(fp, module, FALSE, "_setof.o"); print_generated_file_name(fp, module, FALSE, "_union.o"); + } else if((n_slices = atoi(makefile->code_splitting_mode + 2))) { + for (int i = 1; i < n_slices; i++) { + char buffer[16]; // 6 digits + 4 chars + _part + sprintf(buffer, "_part_%i.o", i); + print_generated_file_name(fp, module, FALSE, buffer); + } } + } } } } @@ -2769,14 +2824,36 @@ static void print_makefile(struct makefile_struct *makefile) else { for (i = 0; i < makefile->nTTCN3Modules; i++) { const struct module_struct *module = makefile->TTCN3Modules + i; - if (module->dir_name != NULL) + if (module->dir_name != NULL) { print_generated_file_name(fp, module, TRUE, ".o"); + if (makefile->code_splitting_mode != NULL) { + int n_slices; + if((n_slices = atoi(makefile->code_splitting_mode + 2))) { + for (int i = 1; i < n_slices; i++) { + char buffer[16]; // 6 digits + 4 chars + _part + sprintf(buffer, "_part_%i.o", i); + print_generated_file_name(fp, module, TRUE, buffer); + } + } + } + } } if (makefile->preprocess) { for (i = 0; i < makefile->nTTCN3PPModules; i++) { const struct module_struct *module = makefile->TTCN3PPModules + i; - if (module->dir_name != NULL) + if (module->dir_name != NULL) { print_generated_file_name(fp, module, TRUE, ".o"); + if (makefile->code_splitting_mode != NULL) { + int n_slices; + if((n_slices = atoi(makefile->code_splitting_mode + 2))) { + for (int i = 1; i < n_slices; i++) { + char buffer[16]; // 6 digits + 4 chars + _part + sprintf(buffer, "_part_%i.o", i); + print_generated_file_name(fp, module, TRUE, buffer); + } + } + } + } } } for (i = 0; i < makefile->nASN1Modules; i++) { @@ -4024,7 +4101,7 @@ static void usage(void) { fprintf(stderr, "\n" "usage: %s [-abc" C_flag "dDEfFglLmMnprRsStTVwWXZ] [-K file] [-z file ] [-P dir]" - " [-U none|type] [-e ets_name] [-o dir|file]\n" + " [-U none|type|'number'] [-e ets_name] [-o dir|file]\n" " [-t project_descriptor.tpd [-b buildconfig]]\n" " [-O file] ... module_name ... testport_name ...\n" " or %s -v\n" @@ -4053,7 +4130,7 @@ static void usage(void) " -R: use function test runtime (TITAN_RUNTIME_2)\n" " -s: generate Makefile for single mode\n" " -S: suppress makefilegen warnings\n" - " -U none|type: split generated code\n" + " -U none|type|'number': split generated code\n" " -v: show version\n" " -w: suppress warnings generated by TITAN\n" " -Y: Enforces legacy behaviour of the \"out\" function parameters (see refguide)\n" @@ -4289,11 +4366,26 @@ int main(int argc, char *argv[]) break; case 'U': SET_FLAG(U); + int n_slices = atoi(optarg); code_splitting_mode = optarg; - if (strcmp(optarg, "none") != 0 && - strcmp(optarg, "type") != 0) + if (!n_slices && + (strcmp(optarg, "none") != 0 && + strcmp(optarg, "type") != 0)) + { ERROR("Unrecognizable argument: '%s'. Valid options for -U switch are: " - "'none', 'type'", optarg); + "'none', 'type', or a number.", optarg); + } else { + size_t length = strlen(optarg); + for (int i=0;i<length; i++) { + if (!isdigit(optarg[i])) { + ERROR("The number argument of -U must be a valid number."); + break; + } + } + if (n_slices < 1 || n_slices > 999999) { + ERROR("The number argument of -U must be between 1 and 999999."); + } + } break; case 'v': SET_FLAG(v); diff --git a/compiler2/ttcn3/AST_ttcn3.cc b/compiler2/ttcn3/AST_ttcn3.cc index 45562f57b..6a4a9a0fc 100644 --- a/compiler2/ttcn3/AST_ttcn3.cc +++ b/compiler2/ttcn3/AST_ttcn3.cc @@ -14,6 +14,7 @@ * Kovacs, Ferenc * Raduly, Csaba * Szabados, Kristof + * Szabo, Bence Janos * Szalai, Gabor * Zalanyi, Balazs Andor * Pandi, Krisztian @@ -1866,7 +1867,10 @@ namespace Ttcn { void Definitions::generate_code(CodeGenHelper& cgh) { // FIXME: implement - for(size_t i = 0; i < ass_v.size(); i++) ass_v[i]->generate_code(cgh); + for(size_t i = 0; i < ass_v.size(); i++) { + ass_v[i]->generate_code(cgh); + CodeGenHelper::update_intervals(cgh.get_current_outputstruct()); + } } char* Definitions::generate_code_str(char *str) @@ -4446,7 +4450,7 @@ namespace Ttcn { } if (erroneous_attrs && erroneous_attrs->get_err_descr()) { function_body = erroneous_attrs->get_err_descr()-> - generate_code_str(function_body, string("ret_val")); + generate_code_str(function_body, target->header.global_vars, string("ret_val"), true); } function_body = body->generate_code_init(function_body, "ret_val"); if (template_restriction!=TR_NONE && gen_restriction_check) diff --git a/compiler2/ttcn3/Attributes.cc b/compiler2/ttcn3/Attributes.cc index 16485b86e..eb91cd9fb 100644 --- a/compiler2/ttcn3/Attributes.cc +++ b/compiler2/ttcn3/Attributes.cc @@ -12,6 +12,7 @@ * Feher, Csaba * Raduly, Csaba * Szabados, Kristof + * Szabo, Bence Janos * Szabo, Janos Zoltan – initial implementation * Zalanyi, Balazs Andor * @@ -20,6 +21,7 @@ #include "../map.hh" #include "../CompilerError.hh" #include "../Type.hh" +#include "../main.hh" #include "TtcnTemplate.hh" namespace Ttcn { @@ -313,17 +315,21 @@ namespace Ttcn { return ""; } - char* ErroneousAttributeSpec::generate_code_str(char *str, string genname) + char* ErroneousAttributeSpec::generate_code_str(char *str, char *& def, string genname, const bool embedded) { if (get_is_omit()) return str; if (!type) FATAL_ERROR("ErroneousAttributeSpec::generate_code_str()"); if (!value) FATAL_ERROR("ErroneousAttributeSpec::generate_code_str()"); if (first_genname.empty()) { // this is the first use - str = mputprintf(str, "static %s %s;\n", + str = mputprintf(str, "%s%s %s;\n", split_to_slices && !embedded ? "" : "static ", type->get_genname_value(value->get_my_scope()).c_str(), genname.c_str()); first_genname = genname; + if (split_to_slices && !embedded) { + def = mputprintf(def, "extern %s %s;\n", + type->get_genname_value(value->get_my_scope()).c_str(), genname.c_str()); + } } else { - str = mputprintf(str, "static %s& %s = %s;\n", + str = mputprintf(str, "%s%s& %s = %s;\n", split_to_slices && !embedded ? "" : "static ", type->get_genname_value(value->get_my_scope()).c_str(), genname.c_str(), first_genname.c_str()); } @@ -358,21 +364,24 @@ namespace Ttcn { // ==== ErroneousValues ==== - char* ErroneousValues::generate_code_embedded_str(char *str, string genname) + char* ErroneousValues::generate_code_embedded_str(char *str, char *& def, string genname, const bool embedded) { - if (before) str = generate_code_embedded_str(str, genname+"_before", before); - if (value) str = generate_code_embedded_str(str, genname+"_value", value); - if (after) str = generate_code_embedded_str(str, genname+"_after", after); + if (before) str = generate_code_embedded_str(str, def, genname+"_before", before, embedded); + if (value) str = generate_code_embedded_str(str, def, genname+"_value", value, embedded); + if (after) str = generate_code_embedded_str(str, def, genname+"_after", after, embedded); return str; } - char* ErroneousValues::generate_code_embedded_str(char *str, string genname, ErroneousAttributeSpec* attr_spec) + char* ErroneousValues::generate_code_embedded_str(char *str, char *& def, string genname, ErroneousAttributeSpec* attr_spec, const bool embedded) { - str = attr_spec->generate_code_str(str, genname+"_errval"); - str = mputprintf(str, "static Erroneous_value_t %s = { %s, %s, %s };\n", genname.c_str(), + str = attr_spec->generate_code_str(str, def, genname+"_errval", embedded); + str = mputprintf(str, "%sErroneous_value_t %s = { %s, %s, %s };\n", split_to_slices && !embedded ? "" : "static ", genname.c_str(), attr_spec->get_is_raw() ? "true" : "false", attr_spec->get_is_omit() ? "NULL" : ("&"+genname+"_errval").c_str(), attr_spec->get_typedescriptor_str().c_str()); + if (split_to_slices && !embedded) { + def = mputprintf(def, "extern Erroneous_value_t %s;\n", genname.c_str()); + } return str; } @@ -403,35 +412,41 @@ namespace Ttcn { // ==== ErroneousDescriptor ==== - char* ErroneousDescriptor::generate_code_embedded_str(char *str, string genname) + char* ErroneousDescriptor::generate_code_embedded_str(char *str, char *& def, string genname, const bool embedded) { // values for (size_t i=0; i<values_m.size(); i++) { - str = values_m.get_nth_elem(i)->generate_code_embedded_str(str, genname+"_v"+Int2string((int)values_m.get_nth_key(i))); + str = values_m.get_nth_elem(i)->generate_code_embedded_str(str, def, genname+"_v"+Int2string((int)values_m.get_nth_key(i)), embedded); } // embedded descriptors for (size_t i=0; i<descr_m.size(); i++) { - str = descr_m.get_nth_elem(i)->generate_code_embedded_str(str, genname+"_d"+Int2string((int)descr_m.get_nth_key(i))); + str = descr_m.get_nth_elem(i)->generate_code_embedded_str(str, def, genname+"_d"+Int2string((int)descr_m.get_nth_key(i)), embedded); } // values vector if (values_m.size()>0) { - str = mputprintf(str, "static Erroneous_values_t %s_valsvec[%d] = { ", genname.c_str(), (int)values_m.size()); + str = mputprintf(str, "%sErroneous_values_t %s_valsvec[%d] = { ", split_to_slices && !embedded ? "" : "static ", genname.c_str(), (int)values_m.size()); for (size_t i=0; i<values_m.size(); i++) { if (i>0) str = mputstr(str, ", "); int key_i = (int)values_m.get_nth_key(i); str = values_m.get_nth_elem(i)->generate_code_struct_str(str, genname+"_v"+Int2string(key_i), key_i); } str = mputstr(str, " };\n"); + if (split_to_slices && !embedded) { + def = mputprintf(def, "extern Erroneous_values_t %s_valsvec[%d];\n", genname.c_str(), (int)values_m.size()); + } } // embedded descriptor vector if (descr_m.size()>0) { - str = mputprintf(str, "static Erroneous_descriptor_t %s_embvec[%d] = { ", genname.c_str(), (int)descr_m.size()); + str = mputprintf(str, "%sErroneous_descriptor_t %s_embvec[%d] = { ", split_to_slices && !embedded ? "" : "static ", genname.c_str(), (int)descr_m.size()); for (size_t i=0; i<descr_m.size(); i++) { if (i>0) str = mputstr(str, ", "); int key_i = (int)descr_m.get_nth_key(i); - str = descr_m.get_nth_elem(i)->generate_code_struct_str(str, genname+"_d"+Int2string(key_i), key_i); + str = descr_m.get_nth_elem(i)->generate_code_struct_str(str, def, genname+"_d"+Int2string(key_i), key_i); } str = mputstr(str, " };\n"); + if (split_to_slices && !embedded) { + def = mputprintf(def, "extern Erroneous_descriptor_t %s_embvec[%d];\n", genname.c_str(), (int)descr_m.size()); + } } return str; } @@ -447,7 +462,7 @@ namespace Ttcn { return str; } - char* ErroneousDescriptor::generate_code_struct_str(char *str, string genname, int field_index) + char* ErroneousDescriptor::generate_code_struct_str(char *str, char *& def, string genname, int field_index) { string genname_values_vec = genname + "_valsvec"; string genname_embedded_vec = genname + "_embvec"; @@ -465,18 +480,22 @@ namespace Ttcn { for (size_t i=0; i<values_m.size(); i++) { values_m.get_nth_elem(i)->chk_recursions(refch); } + for (size_t i=0; i<descr_m.size(); i++) { descr_m.get_nth_elem(i)->chk_recursions(refch); } } - char* ErroneousDescriptor::generate_code_str(char *str, string genname) + char* ErroneousDescriptor::generate_code_str(char *str, char *& def, string genname, const bool embedded) { genname += "_err_descr"; - str = generate_code_embedded_str(str, genname); - str = mputprintf(str, "static Erroneous_descriptor_t %s = ", genname.c_str()); - str = generate_code_struct_str(str, genname, -1); + str = generate_code_embedded_str(str, def, genname, embedded); + str = mputprintf(str, "%sErroneous_descriptor_t %s = ", split_to_slices && !embedded ? "" : "static ", genname.c_str()); + str = generate_code_struct_str(str, def, genname, -1); str = mputstr(str, ";\n"); + if (split_to_slices && !embedded) { + def = mputprintf(def, "extern Erroneous_descriptor_t %s;\n", genname.c_str()); + } return str; } diff --git a/compiler2/ttcn3/Attributes.hh b/compiler2/ttcn3/Attributes.hh index ee25fa81e..edb77e95a 100644 --- a/compiler2/ttcn3/Attributes.hh +++ b/compiler2/ttcn3/Attributes.hh @@ -10,6 +10,7 @@ * Delic, Adam * Raduly, Csaba * Szabados, Kristof + * Szabo, Bence Janos * Szabo, Janos Zoltan – initial implementation * Zalanyi, Balazs Andor * @@ -118,7 +119,7 @@ namespace Ttcn { bool get_is_raw() const { return is_raw; } bool get_is_omit() const; static const char* get_indicator_str(indicator_t i); - char* generate_code_str(char *str, string genname); + char* generate_code_str(char *str, char *& def, string genname, const bool embedded); char* generate_code_init_str(char *str, string genname); string get_typedescriptor_str(); void chk_recursions(ReferenceChain& refch); @@ -131,9 +132,9 @@ namespace Ttcn { ErroneousAttributeSpec *before, *value, *after; // NULL if not specified string field_name; // qualifier string ErroneousValues(const string& p_field_name): before(0), value(0), after(0), field_name(p_field_name) {} - char* generate_code_embedded_str(char *str, string genname); + char* generate_code_embedded_str(char *str, char *& def, string genname, const bool embedded); char* generate_code_init_str(char *str, string genname); - char* generate_code_embedded_str(char *str, string genname, ErroneousAttributeSpec* attr_spec); + char* generate_code_embedded_str(char *str, char *& def, string genname, ErroneousAttributeSpec* attr_spec, const bool embedded); char* generate_code_struct_str(char *str, string genname, int field_index); void chk_recursions(ReferenceChain& refch); }; @@ -151,10 +152,10 @@ namespace Ttcn { public: ErroneousDescriptor(): omit_before(-1), omit_after(-1) {} ~ErroneousDescriptor(); - char* generate_code_embedded_str(char *str, string genname); + char* generate_code_embedded_str(char *str, char *& def, string genname, const bool embedded); char* generate_code_init_str(char *str, string genname); - char* generate_code_struct_str(char *str, string genname, int field_index); - char* generate_code_str(char *str, string genname); + char* generate_code_struct_str(char *str, char *& def, string genname, int field_index); + char* generate_code_str(char *str, char *& def, string genname, const bool embedded); void chk_recursions(ReferenceChain& refch); }; diff --git a/compiler2/ttcn3/compiler.h b/compiler2/ttcn3/compiler.h index a8b02d928..c3e5364dd 100644 --- a/compiler2/ttcn3/compiler.h +++ b/compiler2/ttcn3/compiler.h @@ -14,6 +14,7 @@ * Kovacs, Ferenc * Kremer, Peter * Raduly, Csaba + * Szabo, Bence Janos * Szabo, Janos Zoltan – initial implementation * Tatarka, Gabor * Zalanyi, Balazs Andor @@ -65,6 +66,21 @@ extern "C" { char *start; /**< Code for start_ptc_function() */ char *control; /**< Code for module_control_part() */ } functions; + struct { + size_t pre_things_size; // Size of string_literals + global_vars + size_t *methods; + size_t methods_max_size; + size_t methods_size; + size_t *function_bodies; + size_t function_bodies_max_size; + size_t function_bodies_size; + size_t *static_function_bodies; + size_t static_function_bodies_max_size; + size_t static_function_bodies_size; + size_t *static_conversion_function_bodies; + size_t static_conversion_function_bodies_size; + size_t static_conversion_function_bodies_max_size; + } intervals; } output_struct; typedef struct expression_struct_t { diff --git a/regression_test/ASN1/Test303/Makefile b/regression_test/ASN1/Test303/Makefile index 69dd30b0d..3641956f9 100644 --- a/regression_test/ASN1/Test303/Makefile +++ b/regression_test/ASN1/Test303/Makefile @@ -13,6 +13,7 @@ # Kulcsar, Endre # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -33,6 +34,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/ASN1/Test307/Makefile b/regression_test/ASN1/Test307/Makefile index 5a1337fce..73a51c03d 100644 --- a/regression_test/ASN1/Test307/Makefile +++ b/regression_test/ASN1/Test307/Makefile @@ -13,6 +13,7 @@ # Kulcsar, Endre # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -33,6 +34,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/ASN1/Test308/Makefile b/regression_test/ASN1/Test308/Makefile index 218ab2038..38c2e17f7 100644 --- a/regression_test/ASN1/Test308/Makefile +++ b/regression_test/ASN1/Test308/Makefile @@ -13,6 +13,7 @@ # Kulcsar, Endre # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -33,6 +34,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/ASN1/Test309/Makefile b/regression_test/ASN1/Test309/Makefile index 9d25248dd..7789f92ad 100644 --- a/regression_test/ASN1/Test309/Makefile +++ b/regression_test/ASN1/Test309/Makefile @@ -12,6 +12,7 @@ # Kovacs, Ferenc # Kulcsar, Endre # Raduly, Csaba +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -32,6 +33,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/ASN1/Test310/Makefile b/regression_test/ASN1/Test310/Makefile index d1d7cd7bb..a7c6a150b 100644 --- a/regression_test/ASN1/Test310/Makefile +++ b/regression_test/ASN1/Test310/Makefile @@ -12,6 +12,7 @@ # Kovacs, Ferenc # Kulcsar, Endre # Raduly, Csaba +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -32,6 +33,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/ASN1/Test330/Makefile b/regression_test/ASN1/Test330/Makefile index 326468f34..ab2ba321e 100644 --- a/regression_test/ASN1/Test330/Makefile +++ b/regression_test/ASN1/Test330/Makefile @@ -12,6 +12,7 @@ # Kovacs, Ferenc # Kulcsar, Endre # Raduly, Csaba +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -32,6 +33,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/ASN1/Test332/Makefile b/regression_test/ASN1/Test332/Makefile index 063bf5bcc..819b477b8 100644 --- a/regression_test/ASN1/Test332/Makefile +++ b/regression_test/ASN1/Test332/Makefile @@ -12,6 +12,7 @@ # Kovacs, Ferenc # Kulcsar, Endre # Raduly, Csaba +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -32,6 +33,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/ASN1/Test338/Makefile b/regression_test/ASN1/Test338/Makefile index db473ffad..3d2b6b650 100644 --- a/regression_test/ASN1/Test338/Makefile +++ b/regression_test/ASN1/Test338/Makefile @@ -13,6 +13,7 @@ # Kulcsar, Endre # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -33,6 +34,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/ASN1/Test340/Makefile b/regression_test/ASN1/Test340/Makefile index e6fa11d4f..1e333ffc2 100644 --- a/regression_test/ASN1/Test340/Makefile +++ b/regression_test/ASN1/Test340/Makefile @@ -13,6 +13,7 @@ # Kulcsar, Endre # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -33,6 +34,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/ASN1/Test342/Makefile b/regression_test/ASN1/Test342/Makefile index 160d13d87..76c931940 100644 --- a/regression_test/ASN1/Test342/Makefile +++ b/regression_test/ASN1/Test342/Makefile @@ -12,6 +12,7 @@ # Kovacs, Ferenc # Kulcsar, Endre # Raduly, Csaba +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -32,6 +33,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/ASN1/Test344/Makefile b/regression_test/ASN1/Test344/Makefile index 30a3398b6..87965bb9b 100644 --- a/regression_test/ASN1/Test344/Makefile +++ b/regression_test/ASN1/Test344/Makefile @@ -13,6 +13,7 @@ # Kulcsar, Endre # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -33,6 +34,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/ASN1/Test346/Makefile b/regression_test/ASN1/Test346/Makefile index 03747160e..0a0d1bbc1 100644 --- a/regression_test/ASN1/Test346/Makefile +++ b/regression_test/ASN1/Test346/Makefile @@ -13,6 +13,7 @@ # Kulcsar, Endre # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -33,6 +34,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/ASN1/Test348/Makefile b/regression_test/ASN1/Test348/Makefile index a60a285d0..1bcc9f468 100644 --- a/regression_test/ASN1/Test348/Makefile +++ b/regression_test/ASN1/Test348/Makefile @@ -13,6 +13,7 @@ # Kulcsar, Endre # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -33,6 +34,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/ASN1/Test350/Makefile b/regression_test/ASN1/Test350/Makefile index 45182c17e..f6dbe2877 100644 --- a/regression_test/ASN1/Test350/Makefile +++ b/regression_test/ASN1/Test350/Makefile @@ -13,6 +13,7 @@ # Kulcsar, Endre # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -33,6 +34,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/ASN1/Test352/Makefile b/regression_test/ASN1/Test352/Makefile index 9abc01803..f99da118c 100644 --- a/regression_test/ASN1/Test352/Makefile +++ b/regression_test/ASN1/Test352/Makefile @@ -13,6 +13,7 @@ # Kulcsar, Endre # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -33,6 +34,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/ASN1/Test354/Makefile b/regression_test/ASN1/Test354/Makefile index c9854e007..818c98217 100644 --- a/regression_test/ASN1/Test354/Makefile +++ b/regression_test/ASN1/Test354/Makefile @@ -13,6 +13,7 @@ # Kulcsar, Endre # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -33,6 +34,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/ASN1/Test356/Makefile b/regression_test/ASN1/Test356/Makefile index d8966bf29..468299494 100644 --- a/regression_test/ASN1/Test356/Makefile +++ b/regression_test/ASN1/Test356/Makefile @@ -13,6 +13,7 @@ # Kulcsar, Endre # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -33,6 +34,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/ASN1/Test358/Makefile b/regression_test/ASN1/Test358/Makefile index 61b9774ea..e16e00f5e 100644 --- a/regression_test/ASN1/Test358/Makefile +++ b/regression_test/ASN1/Test358/Makefile @@ -13,6 +13,7 @@ # Kulcsar, Endre # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -33,6 +34,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/ASN1/Test360/Makefile b/regression_test/ASN1/Test360/Makefile index 6ffb52c6e..564c2b532 100644 --- a/regression_test/ASN1/Test360/Makefile +++ b/regression_test/ASN1/Test360/Makefile @@ -13,6 +13,7 @@ # Kulcsar, Endre # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -33,6 +34,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/ASN1/Test38/Makefile b/regression_test/ASN1/Test38/Makefile index 1a1efdce5..197fb3d02 100644 --- a/regression_test/ASN1/Test38/Makefile +++ b/regression_test/ASN1/Test38/Makefile @@ -12,6 +12,7 @@ # Kulcsar, Endre # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -29,6 +30,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif all: $(GENERATED_SOURCES) diff --git a/regression_test/ASN1/codeGeneration2/Makefile b/regression_test/ASN1/codeGeneration2/Makefile index 68b7aa84e..2aa4f4c36 100644 --- a/regression_test/ASN1/codeGeneration2/Makefile +++ b/regression_test/ASN1/codeGeneration2/Makefile @@ -13,6 +13,7 @@ # Kulcsar, Endre # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -36,6 +37,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif all: $(GENERATED_SOURCES) diff --git a/regression_test/ASN1/enum1/Makefile b/regression_test/ASN1/enum1/Makefile index 721087911..aff38ce83 100644 --- a/regression_test/ASN1/enum1/Makefile +++ b/regression_test/ASN1/enum1/Makefile @@ -13,6 +13,7 @@ # Kulcsar, Endre # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -30,6 +31,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif all: $(GENERATED_SOURCES) diff --git a/regression_test/ASN1/enum2/Makefile b/regression_test/ASN1/enum2/Makefile index cf752b724..22435255f 100644 --- a/regression_test/ASN1/enum2/Makefile +++ b/regression_test/ASN1/enum2/Makefile @@ -13,6 +13,7 @@ # Kulcsar, Endre # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -30,6 +31,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif all: $(GENERATED_SOURCES) diff --git a/regression_test/ASN1/hyphen/Makefile b/regression_test/ASN1/hyphen/Makefile index 742c61338..786d5d83d 100644 --- a/regression_test/ASN1/hyphen/Makefile +++ b/regression_test/ASN1/hyphen/Makefile @@ -13,6 +13,7 @@ # Kulcsar, Endre # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -30,6 +31,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif all: $(GENERATED_SOURCES) diff --git a/regression_test/ASN1/hyphen/hyphen b/regression_test/ASN1/hyphen/hyphen index 8b058e401..f58676fb5 100755 --- a/regression_test/ASN1/hyphen/hyphen +++ b/regression_test/ASN1/hyphen/hyphen @@ -13,7 +13,7 @@ then then if $GREP -q "extern const INTEGER& my__Integer__Value" ./Test284.hh then - if $GREP -q "const_my__Integer__Value = 9;" ./Test284.cc + if $GREP -q "const_my__Integer__Value = 9;" ./*.cc then Verdict="pass" else Verdict="fail 4" fi diff --git a/regression_test/ASN1/keyword/Makefile b/regression_test/ASN1/keyword/Makefile index 1f1627b24..28da9153d 100644 --- a/regression_test/ASN1/keyword/Makefile +++ b/regression_test/ASN1/keyword/Makefile @@ -14,6 +14,7 @@ # Kovacs, Ferenc # Kulcsar, Endre # Raduly, Csaba +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -32,6 +33,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif all: $(GENERATED_SOURCES) diff --git a/regression_test/ASN1/transformations/Makefile b/regression_test/ASN1/transformations/Makefile index 8941d8fec..c4c4db601 100644 --- a/regression_test/ASN1/transformations/Makefile +++ b/regression_test/ASN1/transformations/Makefile @@ -13,6 +13,7 @@ # Kulcsar, Endre # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -30,6 +31,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif all: $(GENERATED_SOURCES) diff --git a/regression_test/BER/Makefile b/regression_test/BER/Makefile index b273bc84a..70796e0c5 100644 --- a/regression_test/BER/Makefile +++ b/regression_test/BER/Makefile @@ -12,6 +12,7 @@ # Koppany, Csaba # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -30,6 +31,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(TTCN3_MODULES:.ttcn=.hh) $(ASN1_MODULES:.asn=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif # Source & header files of Test Ports and your other modules: diff --git a/regression_test/BER_x682/Makefile b/regression_test/BER_x682/Makefile index 8361c66da..551dd9915 100644 --- a/regression_test/BER_x682/Makefile +++ b/regression_test/BER_x682/Makefile @@ -12,6 +12,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -29,6 +30,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(TTCN3_MODULES:.ttcn=.hh) $(ASN1_MODULES:.asn=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif USER_SOURCES = MyPort1.cc MyPort2.cc diff --git a/regression_test/BER_x682_wa/Makefile b/regression_test/BER_x682_wa/Makefile index d968cf7ff..eb06f8f3c 100644 --- a/regression_test/BER_x682_wa/Makefile +++ b/regression_test/BER_x682_wa/Makefile @@ -12,6 +12,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -30,6 +31,11 @@ GENERATED_SOURCES = $(ASN1_MODULES:.asn=.cc) $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(ASN1_MODULES:.asn=.hh) $(TTCN3_MODULES:.ttcn=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif USER_SOURCES = MyPort1.cc MyPort2.cc diff --git a/regression_test/CRTR00015758/Makefile b/regression_test/CRTR00015758/Makefile index d39a4e077..3c910c5b1 100644 --- a/regression_test/CRTR00015758/Makefile +++ b/regression_test/CRTR00015758/Makefile @@ -9,6 +9,7 @@ # Baji, Laszlo # Balasko, Jeno # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -52,7 +53,12 @@ ASN1_MODULES = # this project: GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) - +ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) +endif # C/C++ Source & header files of Test Ports, external functions and # other modules: USER_SOURCES = diff --git a/regression_test/ERC/Makefile b/regression_test/ERC/Makefile index d7fe9fb59..1ff73c4bb 100644 --- a/regression_test/ERC/Makefile +++ b/regression_test/ERC/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -26,6 +27,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) @@ -35,14 +41,11 @@ PARALLEL_TARGET = erc_parallel$(EXESUFFIX) all: $(SINGLE_TARGET) $(PARALLEL_TARGET) -$(SINGLE_TARGET): $(OBJECTS) - $(CXX) $(LDFLAGS) -o $@ $(OBJECTS) -L$(TTCN3_DIR)/lib -lttcn3$(RT2_SUFFIX)$(DYNAMIC_SUFFIX) -L$(OPENSSL_DIR)/lib -lcrypto $($(PLATFORM)_LIBS) +$(SINGLE_TARGET): $(GENERATED_SOURCES) + $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $(GENERATED_SOURCES) -L$(TTCN3_DIR)/lib -lttcn3$(RT2_SUFFIX)$(DYNAMIC_SUFFIX) -L$(OPENSSL_DIR)/lib -lcrypto $($(PLATFORM)_LIBS) -$(PARALLEL_TARGET): $(OBJECTS) - $(CXX) $(LDFLAGS) -o $@ $(OBJECTS) -L$(TTCN3_DIR)/lib -lttcn3$(RT2_SUFFIX)-parallel$(DYNAMIC_SUFFIX) -L$(OPENSSL_DIR)/lib -lcrypto $($(PLATFORM)_LIBS) - -.cc.o: - $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< +$(PARALLEL_TARGET): $(GENERATED_SOURCES) + $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $(GENERATED_SOURCES) -L$(TTCN3_DIR)/lib -lttcn3$(RT2_SUFFIX)-parallel$(DYNAMIC_SUFFIX) -L$(OPENSSL_DIR)/lib -lcrypto $($(PLATFORM)_LIBS) .ttcn.cc .ttcn.hh: $(TTCN3_COMPILER) $< diff --git a/regression_test/HQ16404/Makefile b/regression_test/HQ16404/Makefile index 25d30ecca..071d1d216 100644 --- a/regression_test/HQ16404/Makefile +++ b/regression_test/HQ16404/Makefile @@ -9,6 +9,7 @@ # Baji, Laszlo # Balasko, Jeno # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -60,7 +61,12 @@ ASN1_MODULES = # this project: GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) - +ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) +endif # C/C++ Source & header files of Test Ports, external functions and # other modules: USER_SOURCES = diff --git a/regression_test/Makefile.regression b/regression_test/Makefile.regression index 71957f99d..ef142195e 100644 --- a/regression_test/Makefile.regression +++ b/regression_test/Makefile.regression @@ -15,6 +15,7 @@ # Ormandi, Matyas # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # ############################################################################## # @@ -48,7 +49,10 @@ TTCN3_COMPILER += -g -L #RT2 := true # Use code splitting when running the tests +# DO NOT enable both CODE_SPLIT and SPLIT_TO_SLICES #CODE_SPLIT := true +# Use code splitting into slices when running the tests +#SPLIT_TO_SLICES := 30 ifdef RT2 # add command line option to generate code for alternative runtime @@ -70,6 +74,13 @@ ifdef CODE_SPLIT SPLIT_FLAG = -Utype # No space between -U and type ! TTCN3_COMPILER += $(SPLIT_FLAG) +export SPLIT_FLAG +else ifdef SPLIT_TO_SLICES +SPLIT_FLAG := -U$(SPLIT_TO_SLICES) +TTCN3_COMPILER += $(SPLIT_FLAG) +SPLIT_TO_SLICES := $(shell echo $(SPLIT_TO_SLICES) - 1 | bc) +SPLIT_TO_SLICES := $(shell seq 1 ${SPLIT_TO_SLICES}) +export SPLIT_FLAG endif # Your platform. Allowed values: SOLARIS, SOLARIS8, LINUX, FREEBSD, WIN32 diff --git a/regression_test/RAW/Annex_E_variants/Makefile b/regression_test/RAW/Annex_E_variants/Makefile index 96232b0f4..310bc96b3 100644 --- a/regression_test/RAW/Annex_E_variants/Makefile +++ b/regression_test/RAW/Annex_E_variants/Makefile @@ -8,6 +8,7 @@ # Contributors: # Balasko, Jeno # Baranyi, Botond +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../.. @@ -23,6 +24,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif USER_SOURCES = diff --git a/regression_test/RAW/Examples/Makefile b/regression_test/RAW/Examples/Makefile index 7082745be..f37ada9ba 100644 --- a/regression_test/RAW/Examples/Makefile +++ b/regression_test/RAW/Examples/Makefile @@ -13,6 +13,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # Szalai, Gabor # @@ -30,6 +31,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif USER_SOURCES = diff --git a/regression_test/RAW/HN25015/Makefile b/regression_test/RAW/HN25015/Makefile index 72bce4736..e4e033c92 100644 --- a/regression_test/RAW/HN25015/Makefile +++ b/regression_test/RAW/HN25015/Makefile @@ -9,6 +9,7 @@ # Baji, Laszlo # Balasko, Jeno # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../.. @@ -57,7 +58,12 @@ ASN1_MODULES = # this project: GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) - +ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) +endif # C/C++ Source & header files of Test Ports, external functions and # other modules: USER_SOURCES = diff --git a/regression_test/RAW/HQ26535/Makefile b/regression_test/RAW/HQ26535/Makefile index 9c61666ba..77dceede5 100644 --- a/regression_test/RAW/HQ26535/Makefile +++ b/regression_test/RAW/HQ26535/Makefile @@ -9,6 +9,7 @@ # Baji, Laszlo # Balasko, Jeno # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../.. @@ -56,7 +57,12 @@ ASN1_MODULES = # this project: GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) - +ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) +endif # C/C++ Source & header files of Test Ports, external functions and # other modules: USER_SOURCES = diff --git a/regression_test/RAW/HQ49956/Makefile b/regression_test/RAW/HQ49956/Makefile index a06c11b1a..b7717462d 100644 --- a/regression_test/RAW/HQ49956/Makefile +++ b/regression_test/RAW/HQ49956/Makefile @@ -9,6 +9,7 @@ # Baji, Laszlo # Balasko, Jeno # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../.. @@ -56,7 +57,12 @@ ASN1_MODULES = # this project: GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) - +ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) +endif # C/C++ Source & header files of Test Ports, external functions and # other modules: USER_SOURCES = diff --git a/regression_test/RAW/HS16977/Makefile b/regression_test/RAW/HS16977/Makefile index e9aff4a4c..3c74695e8 100644 --- a/regression_test/RAW/HS16977/Makefile +++ b/regression_test/RAW/HS16977/Makefile @@ -9,6 +9,7 @@ # Baji, Laszlo # Balasko, Jeno # Baranyi, Botond +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../.. @@ -56,7 +57,12 @@ ASN1_MODULES = # this project: GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) - +ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) +endif # C/C++ Source & header files of Test Ports, external functions and # other modules: USER_SOURCES = diff --git a/regression_test/RAW/ustr/Makefile b/regression_test/RAW/ustr/Makefile index 00783daab..103474bdc 100644 --- a/regression_test/RAW/ustr/Makefile +++ b/regression_test/RAW/ustr/Makefile @@ -7,6 +7,7 @@ # # Contributors: # Botond Baranyi – initial implementation +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../.. @@ -54,7 +55,12 @@ ASN1_MODULES = # this project: GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) - +ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) +endif # C/C++ Source & header files of Test Ports, external functions and # other modules: USER_SOURCES = diff --git a/regression_test/XML/AbstractBlock/Makefile b/regression_test/XML/AbstractBlock/Makefile index 1bd8b830f..2e9152656 100644 --- a/regression_test/XML/AbstractBlock/Makefile +++ b/regression_test/XML/AbstractBlock/Makefile @@ -8,6 +8,7 @@ # Contributors: # Balasko, Jeno # Baranyi, Botond +# Szabo, Bence Janos # ############################################################################## TOPDIR = ../.. @@ -59,7 +60,12 @@ ASN1_MODULES = # this project: GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) - +ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) +endif # C/C++ Source & header files of Test Ports, external functions and # other modules: USER_SOURCES = diff --git a/regression_test/XML/EXER-whitepaper/Makefile b/regression_test/XML/EXER-whitepaper/Makefile index 922a5a9e6..260899ddc 100644 --- a/regression_test/XML/EXER-whitepaper/Makefile +++ b/regression_test/XML/EXER-whitepaper/Makefile @@ -10,6 +10,7 @@ # Balasko, Jeno # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## # @@ -82,6 +83,11 @@ GENERATED_SOURCES := $(TTCN3_MODULES:.ttcn=.cc) $(PREPROCESSED_TTCN3_MODULES:.tt GENERATED_HEADERS := $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif # C/C++ Source & header files of Test Ports, external functions and diff --git a/regression_test/XML/HM60295/Makefile b/regression_test/XML/HM60295/Makefile index dd345bd9f..88df207eb 100644 --- a/regression_test/XML/HM60295/Makefile +++ b/regression_test/XML/HM60295/Makefile @@ -9,6 +9,7 @@ # Baji, Laszlo # Balasko, Jeno # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../.. @@ -36,6 +37,11 @@ GENERATED_SOURCES := $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS := $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif USER_SOURCES = USER_HEADERS = $(USER_SOURCES:.cc=.hh) diff --git a/regression_test/XML/HN15589/Makefile b/regression_test/XML/HN15589/Makefile index 09742020e..fd9e727c6 100644 --- a/regression_test/XML/HN15589/Makefile +++ b/regression_test/XML/HN15589/Makefile @@ -9,6 +9,7 @@ # Baji, Laszlo # Balasko, Jeno # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../.. @@ -71,6 +72,11 @@ GENERATED_SOURCES := $(TTCN3_MODULES:.ttcn=.cc) $(PREPROCESSED_TTCN3_MODULES:.tt GENERATED_HEADERS := $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif # C/C++ Source & header files of Test Ports, external functions and diff --git a/regression_test/XML/HQ30408/Makefile b/regression_test/XML/HQ30408/Makefile index 0d2a9ad17..0c2cbd386 100644 --- a/regression_test/XML/HQ30408/Makefile +++ b/regression_test/XML/HQ30408/Makefile @@ -9,6 +9,7 @@ # Baji, Laszlo # Balasko, Jeno # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR = ../.. @@ -60,7 +61,12 @@ ASN1_MODULES = # this project: GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) - +ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) +endif # C/C++ Source & header files of Test Ports, external functions and # other modules: USER_SOURCES = diff --git a/regression_test/XML/HR49727/Makefile b/regression_test/XML/HR49727/Makefile index bcc26d0ae..9f313ef34 100644 --- a/regression_test/XML/HR49727/Makefile +++ b/regression_test/XML/HR49727/Makefile @@ -9,6 +9,7 @@ # Baji, Laszlo # Balasko, Jeno # Ormandi, Matyas +# Szabo, Bence Janos # ############################################################################## TOPDIR = ../.. @@ -60,7 +61,12 @@ ASN1_MODULES = # this project: GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) - +ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) +endif # C/C++ Source & header files of Test Ports, external functions and # other modules: USER_SOURCES = diff --git a/regression_test/XML/HU13380/Makefile b/regression_test/XML/HU13380/Makefile index 07796cfb5..edf8ebf9f 100644 --- a/regression_test/XML/HU13380/Makefile +++ b/regression_test/XML/HU13380/Makefile @@ -8,6 +8,7 @@ # Contributors: # Balasko, Jeno # Baranyi, Botond +# Szabo, Bence Janos # ############################################################################## TOPDIR = ../.. @@ -59,7 +60,12 @@ ASN1_MODULES = # this project: GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) - +ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) +endif # C/C++ Source & header files of Test Ports, external functions and # other modules: USER_SOURCES = diff --git a/regression_test/XML/NegativeTest/Makefile b/regression_test/XML/NegativeTest/Makefile index 9898ed77a..1759c8b06 100644 --- a/regression_test/XML/NegativeTest/Makefile +++ b/regression_test/XML/NegativeTest/Makefile @@ -10,6 +10,7 @@ # Balasko, Jeno # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # ############################################################################## #only works with RT2 @@ -62,7 +63,12 @@ ASN1_MODULES = # this project: GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) - +ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) +endif # C/C++ Source & header files of Test Ports, external functions and # other modules: USER_SOURCES = ReadXmlImpl.cc diff --git a/regression_test/XML/TTCNandXML/Makefile b/regression_test/XML/TTCNandXML/Makefile index b382d2e05..f9df9da9b 100644 --- a/regression_test/XML/TTCNandXML/Makefile +++ b/regression_test/XML/TTCNandXML/Makefile @@ -11,6 +11,7 @@ # Baranyi, Botond # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../.. @@ -95,6 +96,11 @@ GENERATED_SOURCES := $(notdir $(TTCN3_MODULES:.ttcn=.cc) $(PREPROCESSED_TTCN3_MO GENERATED_HEADERS := $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif diff --git a/regression_test/XML/UseNilLong/Makefile b/regression_test/XML/UseNilLong/Makefile index b723b0646..0564c5f4c 100644 --- a/regression_test/XML/UseNilLong/Makefile +++ b/regression_test/XML/UseNilLong/Makefile @@ -58,7 +58,12 @@ ASN1_MODULES = # this project: GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) - +ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) +endif # C/C++ Source & header files of Test Ports, external functions and # other modules: USER_SOURCES = diff --git a/regression_test/XML/XER/Makefile b/regression_test/XML/XER/Makefile index 80715b9e4..996f1f52e 100644 --- a/regression_test/XML/XER/Makefile +++ b/regression_test/XML/XER/Makefile @@ -10,6 +10,7 @@ # Balasko, Jeno # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../.. @@ -96,6 +97,11 @@ GENERATED_SOURCES := $(notdir $(TTCN3_MODULES:.ttcn=.cc) $(PREPROCESSED_TTCN3_MO GENERATED_HEADERS := $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif # C/C++ Source & header files of Test Ports, external functions and diff --git a/regression_test/XML/XMLqualif/Makefile b/regression_test/XML/XMLqualif/Makefile index a0c69c23f..b435ad256 100644 --- a/regression_test/XML/XMLqualif/Makefile +++ b/regression_test/XML/XMLqualif/Makefile @@ -10,6 +10,7 @@ # Baji, Laszlo # Balasko, Jeno # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../.. @@ -96,6 +97,11 @@ GENERATED_SOURCES := $(TTCN3_MODULES:.ttcn=.cc) $(TTCN3_PP_MODULES:.ttcnpp=.cc) GENERATED_HEADERS := $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif # C/C++ Source & header files of Test Ports, external functions and diff --git a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/test/Makefile b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/test/Makefile index 9234bd1c3..9fc0bd331 100644 --- a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/test/Makefile +++ b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/test/Makefile @@ -29,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif USER_SOURCES = PIPEasp_PT.cc diff --git a/regression_test/XML/XmlWorkflow/bin/prj2mk.pl b/regression_test/XML/XmlWorkflow/bin/prj2mk.pl index 987bd6461..fcb4b6454 100644 --- a/regression_test/XML/XmlWorkflow/bin/prj2mk.pl +++ b/regression_test/XML/XmlWorkflow/bin/prj2mk.pl @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Pandi, Krisztian # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################### @@ -44,7 +45,7 @@ do { } unless $prj_dir =~ s!/[^/]+$!/!; # Pick up parameters from the environment -my $split = defined $ENV{CODE_SPLIT} ? '-Utype' : ''; +my $split = defined $ENV{SPLIT_FLAG} ? $ENV{SPLIT_FLAG} : ''; my $rt2 = defined $ENV{RT2} ? '-R' : ''; my %files; diff --git a/regression_test/XML/XmlWorkflow/bin2/prj2mk.pl b/regression_test/XML/XmlWorkflow/bin2/prj2mk.pl index 4627d2997..271bbda82 100644 --- a/regression_test/XML/XmlWorkflow/bin2/prj2mk.pl +++ b/regression_test/XML/XmlWorkflow/bin2/prj2mk.pl @@ -8,6 +8,7 @@ # # Contributors: # Balasko, Jeno +# Szabo, Bence Janos # ############################################################################### @@ -41,7 +42,7 @@ do { } unless $prj_dir =~ s!/[^/]+$!/!; # Pick up parameters from the environment -my $split = defined $ENV{CODE_SPLIT} ? '-Utype' : ''; +my $split = defined $ENV{SPLIT_FLAG} ? $ENV{SPLIT_FLAG} : ''; my $rt2 = defined $ENV{RT2} ? '-R' : ''; my %files; diff --git a/regression_test/XML/xsdConverter/Makefile.converter b/regression_test/XML/xsdConverter/Makefile.converter index b5ff34d4f..49f7be199 100644 --- a/regression_test/XML/xsdConverter/Makefile.converter +++ b/regression_test/XML/xsdConverter/Makefile.converter @@ -22,6 +22,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif diff --git a/regression_test/acceptance_test/Fibonacci/Makefile b/regression_test/acceptance_test/Fibonacci/Makefile index 971d9bf92..4498894ea 100644 --- a/regression_test/acceptance_test/Fibonacci/Makefile +++ b/regression_test/acceptance_test/Fibonacci/Makefile @@ -10,6 +10,7 @@ # Delic, Adam # Gecse, Roland # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## # This Makefile was generated by the compiler @@ -75,6 +76,11 @@ GENERATED_SOURCES = Fibonacci.cc GENERATED_HEADERS = Fibonacci.hh ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif # Source & header files of Test Ports and your other modules: diff --git a/regression_test/acceptance_test/chinese/Makefile b/regression_test/acceptance_test/chinese/Makefile index dab486153..1d6a2f1af 100644 --- a/regression_test/acceptance_test/chinese/Makefile +++ b/regression_test/acceptance_test/chinese/Makefile @@ -10,6 +10,7 @@ # Delic, Adam # Gecse, Roland # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## # This Makefile was generated by the compiler @@ -76,6 +77,11 @@ GENERATED_SOURCES = chinese.cc GENERATED_HEADERS = chinese.hh ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif # Source & header files of Test Ports and your other modules: diff --git a/regression_test/acceptance_test/comptest/Makefile b/regression_test/acceptance_test/comptest/Makefile index e445fc98e..bf8f8aa37 100644 --- a/regression_test/acceptance_test/comptest/Makefile +++ b/regression_test/acceptance_test/comptest/Makefile @@ -10,6 +10,7 @@ # Delic, Adam # Gecse, Roland # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../../ @@ -46,6 +47,11 @@ GENERATED_SOURCES = comptest.cc GENERATED_HEADERS = comptest.hh ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif # Source & header files of Test Ports and your other modules: diff --git a/regression_test/acceptance_test/testerlanc/Makefile b/regression_test/acceptance_test/testerlanc/Makefile index 3e031e7fc..3c2a500e1 100644 --- a/regression_test/acceptance_test/testerlanc/Makefile +++ b/regression_test/acceptance_test/testerlanc/Makefile @@ -10,6 +10,7 @@ # Delic, Adam # Gecse, Roland # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## # This Makefile was generated by the compiler @@ -76,6 +77,11 @@ GENERATED_SOURCES = testerlanc.cc GENERATED_HEADERS = testerlanc.hh ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif # Source & header files of Test Ports and your other modules: diff --git a/regression_test/all_from/Makefile b/regression_test/all_from/Makefile index c0d381b5b..08d6653bc 100644 --- a/regression_test/all_from/Makefile +++ b/regression_test/all_from/Makefile @@ -10,6 +10,7 @@ # Balasko, Jeno # Baranyi, Botond # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -63,7 +64,12 @@ ASN1_MODULES = # this project: GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) - +ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) +endif # C/C++ Source & header files of Test Ports, external functions and # other modules: USER_SOURCES = f_ext.cc diff --git a/regression_test/anytype/Makefile b/regression_test/anytype/Makefile index 4f45e739e..844136f64 100644 --- a/regression_test/anytype/Makefile +++ b/regression_test/anytype/Makefile @@ -10,6 +10,7 @@ # Balasko, Jeno # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -85,6 +86,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(PREPROCESSED_TTCN3_MODULES:.ttc GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif # C/C++ Source & header files of Test Ports, external functions and diff --git a/regression_test/anytypeOper/Makefile b/regression_test/anytypeOper/Makefile index ae395cb71..6ba0b6e8c 100644 --- a/regression_test/anytypeOper/Makefile +++ b/regression_test/anytypeOper/Makefile @@ -8,6 +8,7 @@ # Contributors: # Balasko, Jeno # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -24,6 +25,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/arrayOper/Makefile b/regression_test/arrayOper/Makefile index cc424f458..821c7708a 100644 --- a/regression_test/arrayOper/Makefile +++ b/regression_test/arrayOper/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/assignmentNotation/Makefile b/regression_test/assignmentNotation/Makefile index fb9e72998..299e61709 100644 --- a/regression_test/assignmentNotation/Makefile +++ b/regression_test/assignmentNotation/Makefile @@ -10,6 +10,7 @@ # Delic, Adam # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -26,6 +27,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) ASN_Definitions.cc GENERATED_HEADERS = $(TTCN3_MODULES:.ttcn=.hh) ASN_Definitions.hh ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif USER_SOURCES = diff --git a/regression_test/basicStatem/Makefile b/regression_test/basicStatem/Makefile index eb448e026..754bf0dd3 100644 --- a/regression_test/basicStatem/Makefile +++ b/regression_test/basicStatem/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/bitstrOper/Makefile b/regression_test/bitstrOper/Makefile index c74ab85b7..4203f661a 100644 --- a/regression_test/bitstrOper/Makefile +++ b/regression_test/bitstrOper/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/boolOper/Makefile b/regression_test/boolOper/Makefile index f1ba50f81..ba829315a 100644 --- a/regression_test/boolOper/Makefile +++ b/regression_test/boolOper/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/cfgFile/define/macro_reference/Makefile b/regression_test/cfgFile/define/macro_reference/Makefile index 37842c4ac..5513772cc 100644 --- a/regression_test/cfgFile/define/macro_reference/Makefile +++ b/regression_test/cfgFile/define/macro_reference/Makefile @@ -10,6 +10,7 @@ # Beres, Szabolcs # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../../../ @@ -48,12 +49,12 @@ all: $(GENERATED_DIRS) $(DIR_SINGLE): mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) -s ./* && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) $(SPLIT_FLAG) -s ./* && $(MAKE_PROG) $(DIR_PARALLEL): mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) ./* && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) $(SPLIT_FLAG) ./* && $(MAKE_PROG) run: $(GENERATED_DIRS) cd $(DIR_SINGLE) && ./$(RUNNABLE) $(CFG) diff --git a/regression_test/cfgFile/define/structured/Makefile b/regression_test/cfgFile/define/structured/Makefile index d131aeddd..30617920b 100644 --- a/regression_test/cfgFile/define/structured/Makefile +++ b/regression_test/cfgFile/define/structured/Makefile @@ -10,6 +10,7 @@ # Beres, Szabolcs # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../../../ @@ -48,12 +49,12 @@ all: $(GENERATED_DIRS) $(DIR_SINGLE): mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) -s ./* && $(MAKE_PROG) 'CXXFLAGS=$(CXXFLAGS)' 'LDFLAGS=$(LDFLAGS)' + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) $(SPLIT_FLAG) -s ./* && $(MAKE_PROG) 'CXXFLAGS=$(CXXFLAGS)' 'LDFLAGS=$(LDFLAGS)' $(DIR_PARALLEL): mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) ./* && $(MAKE_PROG) 'CXXFLAGS=$(CXXFLAGS)' 'LDFLAGS=$(LDFLAGS)' + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) $(SPLIT_FLAG) ./* && $(MAKE_PROG) 'CXXFLAGS=$(CXXFLAGS)' 'LDFLAGS=$(LDFLAGS)' run: $(GENERATED_DIRS) cd $(DIR_SINGLE) && ./$(RUNNABLE) $(CFG) diff --git a/regression_test/cfgFile/module_parameters/assignment/Makefile b/regression_test/cfgFile/module_parameters/assignment/Makefile index 97e3f6d65..8a88a731c 100644 --- a/regression_test/cfgFile/module_parameters/assignment/Makefile +++ b/regression_test/cfgFile/module_parameters/assignment/Makefile @@ -10,6 +10,7 @@ # Beres, Szabolcs # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../../../ @@ -45,12 +46,12 @@ all: $(GENERATED_DIRS) dir_single_mode: mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) -s ./* && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) $(SPLIT_FLAG) -s ./* && $(MAKE_PROG) dir_parallel_mode: mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) ./* && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) $(SPLIT_FLAG) ./* && $(MAKE_PROG) run: $(GENERATED_DIRS) cd $(DIR_SINGLE) && ./$(RUNNABLE) $(CFG) diff --git a/regression_test/cfgFile/module_parameters/concat/Makefile b/regression_test/cfgFile/module_parameters/concat/Makefile index 22e71edec..73665316a 100644 --- a/regression_test/cfgFile/module_parameters/concat/Makefile +++ b/regression_test/cfgFile/module_parameters/concat/Makefile @@ -10,6 +10,7 @@ # Beres, Szabolcs # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../../../ @@ -45,12 +46,12 @@ all: $(GENERATED_DIRS) dir_single_mode: mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) -s ./* && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) $(SPLIT_FLAG) -s ./* && $(MAKE_PROG) dir_parallel_mode: mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) ./* && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) $(SPLIT_FLAG) ./* && $(MAKE_PROG) run: $(GENERATED_DIRS) cd $(DIR_SINGLE) && ./$(RUNNABLE) $(CFG) diff --git a/regression_test/cfgFile/module_parameters/references/Makefile b/regression_test/cfgFile/module_parameters/references/Makefile index 9db946076..6337ff948 100644 --- a/regression_test/cfgFile/module_parameters/references/Makefile +++ b/regression_test/cfgFile/module_parameters/references/Makefile @@ -8,6 +8,7 @@ # Contributors: # Balasko, Jeno # Baranyi, Botond +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../../../ @@ -43,12 +44,12 @@ all: $(GENERATED_DIRS) dir_single_mode: mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) -s ./* && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) $(SPLIT_FLAG) -s ./* && $(MAKE_PROG) dir_parallel_mode: mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) ./* && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) $(SPLIT_FLAG) ./* && $(MAKE_PROG) run: $(GENERATED_DIRS) cd $(DIR_SINGLE) && ./$(RUNNABLE) $(CFG) diff --git a/regression_test/cfgFile/ordered_include/Makefile b/regression_test/cfgFile/ordered_include/Makefile index 281268697..dfde53440 100644 --- a/regression_test/cfgFile/ordered_include/Makefile +++ b/regression_test/cfgFile/ordered_include/Makefile @@ -8,6 +8,7 @@ # Contributors: # Balasko, Jeno # Szabados, Kristof +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../../ @@ -46,12 +47,12 @@ all: $(GENERATED_DIRS) dir_single_mode: mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) -s ./* && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) $(SPLIT_FLAG) -s ./* && $(MAKE_PROG) dir_parallel_mode: mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) ./* && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) $(SPLIT_FLAG) ./* && $(MAKE_PROG) run: clean run_single run_parallel diff --git a/regression_test/cfgFile/testport_parameters/Makefile b/regression_test/cfgFile/testport_parameters/Makefile index 1012a2869..4c0d3bd8d 100644 --- a/regression_test/cfgFile/testport_parameters/Makefile +++ b/regression_test/cfgFile/testport_parameters/Makefile @@ -9,6 +9,7 @@ # Balasko, Jeno # Baranyi, Botond # Szabados, Kristof +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../../ @@ -46,12 +47,12 @@ all: $(GENERATED_DIRS) dir_single_mode: mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) -s $(TTCN_MODULE) $(PORT) && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) $(SPLIT_FLAG) -s $(TTCN_MODULE) $(PORT) && $(MAKE_PROG) dir_parallel_mode: mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) $(TTCN_MODULE) $(PORT) && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) $(SPLIT_FLAG) $(TTCN_MODULE) $(PORT) && $(MAKE_PROG) run: $(GENERATED_DIRS) cd $(DIR_SINGLE) && ./$(RUNNABLE) $(CFG) diff --git a/regression_test/charOper/Makefile b/regression_test/charOper/Makefile index 79abaf4c4..54c96c321 100644 --- a/regression_test/charOper/Makefile +++ b/regression_test/charOper/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/charstrOper/Makefile b/regression_test/charstrOper/Makefile index 64699fbf1..a3b093c8b 100644 --- a/regression_test/charstrOper/Makefile +++ b/regression_test/charstrOper/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/checkstate/Makefile b/regression_test/checkstate/Makefile index 462c4d95d..19a316328 100644 --- a/regression_test/checkstate/Makefile +++ b/regression_test/checkstate/Makefile @@ -23,6 +23,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif USER_SOURCES = diff --git a/regression_test/commMessage/Makefile b/regression_test/commMessage/Makefile index 58ad50234..a9eaba960 100644 --- a/regression_test/commMessage/Makefile +++ b/regression_test/commMessage/Makefile @@ -14,6 +14,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -34,6 +35,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(TTCN3_MODULES:.ttcn=.hh) $(ASN1_MODULES:.asn=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/commProcedure/Makefile b/regression_test/commProcedure/Makefile index 4fde71ec0..4e61d4422 100644 --- a/regression_test/commProcedure/Makefile +++ b/regression_test/commProcedure/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # Tatarka, Gabor # @@ -29,6 +30,11 @@ GENERATED_SOURCES := $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS := $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif GENERATED_SOURCES += CompileOnlyPort.cc CompileOnlyPortAddress.cc GENERATED_HEADERS += CompileOnlyPort.hh CompileOnlyPortAddress.hh diff --git a/regression_test/compileonly/HT48786/Makefile b/regression_test/compileonly/HT48786/Makefile index 8fb30f7e3..3d246df07 100644 --- a/regression_test/compileonly/HT48786/Makefile +++ b/regression_test/compileonly/HT48786/Makefile @@ -8,6 +8,7 @@ # Contributors: # Balasko, Jeno # Baranyi, Botond +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../.. @@ -25,6 +26,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/compileonly/assignmentNotation/Makefile b/regression_test/compileonly/assignmentNotation/Makefile index 4f0c3dd21..aa0f7f28d 100644 --- a/regression_test/compileonly/assignmentNotation/Makefile +++ b/regression_test/compileonly/assignmentNotation/Makefile @@ -10,6 +10,7 @@ # Delic, Adam # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../.. @@ -25,6 +26,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/compileonly/attribQualif/Makefile b/regression_test/compileonly/attribQualif/Makefile index 1f6dd997b..46502a795 100644 --- a/regression_test/compileonly/attribQualif/Makefile +++ b/regression_test/compileonly/attribQualif/Makefile @@ -9,6 +9,7 @@ # Balasko, Jeno # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../.. @@ -25,6 +26,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/compileonly/circularImport/Makefile b/regression_test/compileonly/circularImport/Makefile index bb2e9b2ba..401007130 100644 --- a/regression_test/compileonly/circularImport/Makefile +++ b/regression_test/compileonly/circularImport/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -27,6 +28,11 @@ GENERATED_SOURCES := $(MODULES:.asn=.cc) GENERATED_HEADERS := $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS := $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/compileonly/circularImport2/Makefile b/regression_test/compileonly/circularImport2/Makefile index 04fbd8e9e..eca4a90ae 100644 --- a/regression_test/compileonly/circularImport2/Makefile +++ b/regression_test/compileonly/circularImport2/Makefile @@ -8,6 +8,7 @@ # Contributors: # Balasko, Jeno # Baranyi, Botond +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../.. @@ -23,6 +24,11 @@ GENERATED_SOURCES := $(MODULES:.asn=.cc) GENERATED_HEADERS := $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS := $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/compileonly/compareImported/Makefile b/regression_test/compileonly/compareImported/Makefile index cbc7e8e41..41e231f0c 100644 --- a/regression_test/compileonly/compareImported/Makefile +++ b/regression_test/compileonly/compareImported/Makefile @@ -10,6 +10,7 @@ # Delic, Adam # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/compileonly/compoundif/Makefile b/regression_test/compileonly/compoundif/Makefile index 616d2243f..c27382824 100644 --- a/regression_test/compileonly/compoundif/Makefile +++ b/regression_test/compileonly/compoundif/Makefile @@ -10,6 +10,7 @@ # Delic, Adam # Forstner, Matyas # Kovacs, Ferenc +# Szabo, Bence Janos # Raduly, Csaba # ############################################################################## @@ -26,6 +27,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/compileonly/defaultParamUsageBeforeDecl/Makefile b/regression_test/compileonly/defaultParamUsageBeforeDecl/Makefile index 024abd788..c0753022f 100644 --- a/regression_test/compileonly/defaultParamUsageBeforeDecl/Makefile +++ b/regression_test/compileonly/defaultParamUsageBeforeDecl/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -27,6 +28,11 @@ GENERATED_SOURCES := $(MODULES:.ttcn=.cc) GENERATED_HEADERS := $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS := $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/compileonly/dynamicTemplate/Makefile b/regression_test/compileonly/dynamicTemplate/Makefile index 49b734b44..beb093b4f 100644 --- a/regression_test/compileonly/dynamicTemplate/Makefile +++ b/regression_test/compileonly/dynamicTemplate/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -29,6 +30,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif USER_SOURCES = external.cc @@ -62,3 +68,4 @@ DynamicTemplate.o: DynamicTemplate.cc DynamicTemplate.hh vpath $(USER_SOURCES) $(ABS_SRC) + diff --git a/regression_test/compileonly/isbound/Makefile b/regression_test/compileonly/isbound/Makefile index 0324c0788..cc13f9ccf 100644 --- a/regression_test/compileonly/isbound/Makefile +++ b/regression_test/compileonly/isbound/Makefile @@ -10,6 +10,7 @@ # Delic, Adam # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## #!/usr/bin/make -f @@ -50,6 +51,11 @@ GOOD_HH := $(GOOD_TTCN:.ttcn=.hh) ifdef CODE_SPLIT GOOD_CC := $(foreach file, $(GOOD_CC:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GOOD_CC:.cc=), $(addprefix $(file), $(POSTFIXES))) +GOOD_CC += $(GENERATED_SOURCES2) endif diff --git a/regression_test/compileonly/namedActualParameters/Makefile b/regression_test/compileonly/namedActualParameters/Makefile index 2acf70cf5..284945599 100644 --- a/regression_test/compileonly/namedActualParameters/Makefile +++ b/regression_test/compileonly/namedActualParameters/Makefile @@ -10,6 +10,7 @@ # Delic, Adam # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../.. @@ -25,6 +26,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/compileonly/openType/Makefile b/regression_test/compileonly/openType/Makefile index a49f48f39..529e4529e 100644 --- a/regression_test/compileonly/openType/Makefile +++ b/regression_test/compileonly/openType/Makefile @@ -10,6 +10,7 @@ # Delic, Adam # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -26,6 +27,11 @@ GENERATED_SOURCES := $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS := $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS := $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/compileonly/openTypeNames/Makefile b/regression_test/compileonly/openTypeNames/Makefile index 9f471831c..baf4892f1 100644 --- a/regression_test/compileonly/openTypeNames/Makefile +++ b/regression_test/compileonly/openTypeNames/Makefile @@ -8,6 +8,7 @@ # Contributors: # Balasko, Jeno # Baranyi, Botond +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../.. @@ -24,6 +25,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/compileonly/optionalAssignCompare/Makefile b/regression_test/compileonly/optionalAssignCompare/Makefile index 6ab5d74b5..3edd0dabe 100644 --- a/regression_test/compileonly/optionalAssignCompare/Makefile +++ b/regression_test/compileonly/optionalAssignCompare/Makefile @@ -10,6 +10,7 @@ # Delic, Adam # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -26,6 +27,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/compileonly/portConstructor/Makefile b/regression_test/compileonly/portConstructor/Makefile index 264a2861c..c7fc1b56a 100644 --- a/regression_test/compileonly/portConstructor/Makefile +++ b/regression_test/compileonly/portConstructor/Makefile @@ -10,6 +10,7 @@ # Delic, Adam # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -27,6 +28,11 @@ GENERATED_SOURCES := $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS := $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif GENERATED_SOURCES += PT1.cc PT3.cc GENERATED_HEADERS += PT1.hh PT3.hh diff --git a/regression_test/compileonly/selectCase/Makefile b/regression_test/compileonly/selectCase/Makefile index 846e2da2a..ddee69884 100644 --- a/regression_test/compileonly/selectCase/Makefile +++ b/regression_test/compileonly/selectCase/Makefile @@ -8,6 +8,7 @@ # Contributors: # Balasko, Jeno # Baranyi, Botond +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../.. @@ -23,6 +24,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/compileonly/styleGuide/Makefile b/regression_test/compileonly/styleGuide/Makefile index ed9c3c458..3b010716a 100644 --- a/regression_test/compileonly/styleGuide/Makefile +++ b/regression_test/compileonly/styleGuide/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -33,6 +34,11 @@ GENERATED_SOURCES := $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS := $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif GENERATED_SOURCES += $(TESTPORT_SOURCES) GENERATED_HEADERS += $(TESTPORT_SOURCES:.cc=.hh) diff --git a/regression_test/compileonly/topLevelPdu/Makefile b/regression_test/compileonly/topLevelPdu/Makefile index 1cb1457eb..410f705ca 100644 --- a/regression_test/compileonly/topLevelPdu/Makefile +++ b/regression_test/compileonly/topLevelPdu/Makefile @@ -10,6 +10,7 @@ # Delic, Adam # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -27,6 +28,11 @@ GENERATED_SOURCES := $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS := $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS := $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/compileonly/typeInstantiation/Makefile b/regression_test/compileonly/typeInstantiation/Makefile index 4bd5e8e61..a147a05af 100644 --- a/regression_test/compileonly/typeInstantiation/Makefile +++ b/regression_test/compileonly/typeInstantiation/Makefile @@ -10,6 +10,7 @@ # Delic, Adam # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -26,6 +27,11 @@ GENERATED_SOURCES := $(MODULES:.asn=.cc) GENERATED_HEADERS := $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS := $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/configOper/Makefile b/regression_test/configOper/Makefile index d68941030..9531689f9 100644 --- a/regression_test/configOper/Makefile +++ b/regression_test/configOper/Makefile @@ -13,6 +13,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -30,6 +31,11 @@ GENERATED_SOURCES := $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS := $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif USER_SOURCES := configOper_port2.cc USER_HEADERS := $(USER_SOURCES:.cc=.hh) diff --git a/regression_test/controlTimer/Makefile b/regression_test/controlTimer/Makefile index 7d85d58dd..00cecf113 100644 --- a/regression_test/controlTimer/Makefile +++ b/regression_test/controlTimer/Makefile @@ -10,6 +10,7 @@ # Delic, Adam # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -27,6 +28,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/customEncoding/Makefile b/regression_test/customEncoding/Makefile index b5d37f282..5d4a4abab 100644 --- a/regression_test/customEncoding/Makefile +++ b/regression_test/customEncoding/Makefile @@ -8,6 +8,7 @@ # Contributors: # Balasko, Jeno # Baranyi, Botond +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -26,6 +27,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) $(USER_SOURCES:.cc=.o) diff --git a/regression_test/defaultOper/Makefile b/regression_test/defaultOper/Makefile index 776aef805..093f8c295 100644 --- a/regression_test/defaultOper/Makefile +++ b/regression_test/defaultOper/Makefile @@ -10,6 +10,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -26,6 +27,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/enumOper/Makefile b/regression_test/enumOper/Makefile index 160226a5c..edf0c4f04 100644 --- a/regression_test/enumOper/Makefile +++ b/regression_test/enumOper/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/floatOper/Makefile b/regression_test/floatOper/Makefile index 99a45548c..fc26c4fdc 100644 --- a/regression_test/floatOper/Makefile +++ b/regression_test/floatOper/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/functionReference/Makefile b/regression_test/functionReference/Makefile index 2d7704362..75ac7dd0f 100644 --- a/regression_test/functionReference/Makefile +++ b/regression_test/functionReference/Makefile @@ -10,6 +10,7 @@ # Delic, Adam # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -26,6 +27,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/functionSubref/Makefile b/regression_test/functionSubref/Makefile index 9029e613e..c90509f55 100644 --- a/regression_test/functionSubref/Makefile +++ b/regression_test/functionSubref/Makefile @@ -8,6 +8,7 @@ # Contributors: # Balasko, Jeno # Baranyi, Botond +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -24,6 +25,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif USER_SOURCES = USER_HEADERS = $(USER_SOURCES:.cc=.hh) diff --git a/regression_test/hexstrOper/Makefile b/regression_test/hexstrOper/Makefile index 228d715dc..911b1cbd8 100644 --- a/regression_test/hexstrOper/Makefile +++ b/regression_test/hexstrOper/Makefile @@ -9,6 +9,7 @@ # Balasko, Jeno # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -25,6 +26,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/hostid/Makefile b/regression_test/hostid/Makefile index 614df8fa4..1f18f4780 100644 --- a/regression_test/hostid/Makefile +++ b/regression_test/hostid/Makefile @@ -23,6 +23,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif USER_SOURCES = diff --git a/regression_test/iconv/Makefile b/regression_test/iconv/Makefile index e0520e5a3..998809e8a 100644 --- a/regression_test/iconv/Makefile +++ b/regression_test/iconv/Makefile @@ -9,6 +9,7 @@ # Baji, Laszlo # Balasko, Jeno # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -51,6 +52,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif # C/C++ Source & header files of Test Ports, external functions and diff --git a/regression_test/implicitMsgEncoding/Makefile b/regression_test/implicitMsgEncoding/Makefile index c482b0ee0..dc0e9bc62 100644 --- a/regression_test/implicitMsgEncoding/Makefile +++ b/regression_test/implicitMsgEncoding/Makefile @@ -12,6 +12,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(TTCN3_MODULES:.ttcn=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif # Source & header files of Test Ports and your other modules: diff --git a/regression_test/implicitOmit/Makefile b/regression_test/implicitOmit/Makefile index e091c962c..e5c50268a 100644 --- a/regression_test/implicitOmit/Makefile +++ b/regression_test/implicitOmit/Makefile @@ -11,6 +11,7 @@ # Balasko, Jeno # Baranyi, Botond # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -52,7 +53,12 @@ ASN1_MODULES = IOAsn.asn # this project: GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) - +ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) +endif # C/C++ Source & header files of Test Ports, external functions and # other modules: USER_SOURCES = diff --git a/regression_test/intOper/Makefile b/regression_test/intOper/Makefile index 11be01670..b07d020cf 100644 --- a/regression_test/intOper/Makefile +++ b/regression_test/intOper/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif USER_SOURCES = PCOType.cc USER_HEADERS = $(USER_SOURCES:.cc=.hh) diff --git a/regression_test/ipv6/Makefile b/regression_test/ipv6/Makefile index 8aa79d7fc..002985f16 100644 --- a/regression_test/ipv6/Makefile +++ b/regression_test/ipv6/Makefile @@ -9,6 +9,7 @@ # Balasko, Jeno # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -25,6 +26,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif USER_SOURCES = USER_HEADERS = $(USER_SOURCES:.cc=.hh) diff --git a/regression_test/ispresent/Makefile b/regression_test/ispresent/Makefile index dd4dc0dfb..2307b0989 100644 --- a/regression_test/ispresent/Makefile +++ b/regression_test/ispresent/Makefile @@ -7,6 +7,7 @@ # # Contributors: # Balasko, Jeno +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -23,6 +24,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/json/Makefile b/regression_test/json/Makefile index 2c69459f6..33a642315 100644 --- a/regression_test/json/Makefile +++ b/regression_test/json/Makefile @@ -8,6 +8,7 @@ # Contributors: # Balasko, Jeno # Baranyi, Botond +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -26,6 +27,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif USER_SOURCES = diff --git a/regression_test/junitlogger/Makefile b/regression_test/junitlogger/Makefile index 98682c9ad..91eccd03f 100644 --- a/regression_test/junitlogger/Makefile +++ b/regression_test/junitlogger/Makefile @@ -8,6 +8,7 @@ # Contributors: # Balasko, Jeno # Lovassy, Arpad +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -25,6 +26,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/lazyEval/Makefile b/regression_test/lazyEval/Makefile index 20bae6e33..218091e48 100644 --- a/regression_test/lazyEval/Makefile +++ b/regression_test/lazyEval/Makefile @@ -8,6 +8,7 @@ # Contributors: # Balasko, Jeno # Szabados, Kristof +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../ @@ -44,12 +45,12 @@ all: $(GENERATED_DIRS) $(DIR_SINGLE): mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) -s -e $(RUNNABLE) ./* && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) $(SPLIT_FLAG) -s -e $(RUNNABLE) ./* && $(MAKE_PROG) $(DIR_PARALLEL): mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) -e $(RUNNABLE) ./* && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) $(SPLIT_FLAG) -e $(RUNNABLE) ./* && $(MAKE_PROG) run: $(GENERATED_DIRS) cd $(DIR_SINGLE) && ./$(RUNNABLE) $(CFG) && grep "Overall verdict: pass" *.log diff --git a/regression_test/logFiles/Makefile b/regression_test/logFiles/Makefile index 8deeea6e5..adeada1cc 100644 --- a/regression_test/logFiles/Makefile +++ b/regression_test/logFiles/Makefile @@ -39,6 +39,12 @@ GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +COMPILER_FLAGS += $(SPLIT_FLAG) +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif USER_SOURCES := $(ABS_SRC)/extfunc.cc diff --git a/regression_test/logger_control/Makefile b/regression_test/logger_control/Makefile index fa9f3cd2e..62797228c 100644 --- a/regression_test/logger_control/Makefile +++ b/regression_test/logger_control/Makefile @@ -9,6 +9,7 @@ # Baji, Laszlo # Balasko, Jeno # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -61,7 +62,12 @@ ASN1_MODULES = # this project: GENERATED_SOURCES := $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS := $(GENERATED_SOURCES:.cc=.hh) - +ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) +endif # C/C++ Source & header files of Test Ports, external functions and # other modules: USER_SOURCES := diff --git a/regression_test/logger_control/TitanLoggerControl.ttcn b/regression_test/logger_control/TitanLoggerControl.ttcn deleted file mode 120000 index c2f0bda98..000000000 --- a/regression_test/logger_control/TitanLoggerControl.ttcn +++ /dev/null @@ -1 +0,0 @@ -../../core/TitanLoggerControl.ttcn \ No newline at end of file diff --git a/regression_test/loggerplugin/Makefile b/regression_test/loggerplugin/Makefile index 76730c380..274049e22 100644 --- a/regression_test/loggerplugin/Makefile +++ b/regression_test/loggerplugin/Makefile @@ -8,6 +8,7 @@ # Contributors: # Balasko, Jeno # Delic, Adam +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -24,6 +25,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/lostTimer/Makefile b/regression_test/lostTimer/Makefile index 97c3832fe..40fe1efce 100644 --- a/regression_test/lostTimer/Makefile +++ b/regression_test/lostTimer/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/macros/Makefile b/regression_test/macros/Makefile index d77fac4d1..33fb96cd4 100644 --- a/regression_test/macros/Makefile +++ b/regression_test/macros/Makefile @@ -10,6 +10,7 @@ # Czerman, Oliver # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -26,6 +27,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/modifiedTemplate/Makefile b/regression_test/modifiedTemplate/Makefile index 523cb8867..8350669c2 100644 --- a/regression_test/modifiedTemplate/Makefile +++ b/regression_test/modifiedTemplate/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/namedActualParameters/Makefile b/regression_test/namedActualParameters/Makefile index 2a5c2b79d..33bd9c7b8 100644 --- a/regression_test/namedActualParameters/Makefile +++ b/regression_test/namedActualParameters/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -27,6 +28,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/negativeTest/Makefile b/regression_test/negativeTest/Makefile index 9560f9928..c7b0d0b24 100644 --- a/regression_test/negativeTest/Makefile +++ b/regression_test/negativeTest/Makefile @@ -11,6 +11,7 @@ # Delic, Adam # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # ############################################################################## ifeq "$(MAKELEVEL)" "0" @@ -49,6 +50,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(TTCN3_MODULES:.ttcn=.hh) $(ASN1_MODULES:.asn=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif USER_SOURCES = diff --git a/regression_test/nonMandatoryPar/Makefile b/regression_test/nonMandatoryPar/Makefile index 0f23d8dcd..2705afeca 100644 --- a/regression_test/nonMandatoryPar/Makefile +++ b/regression_test/nonMandatoryPar/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -27,6 +28,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif USER_SOURCES = PCOType.cc USER_HEADERS = $(USER_SOURCES:.cc=.hh) diff --git a/regression_test/objidOper/Makefile b/regression_test/objidOper/Makefile index daa01c424..89fdd19ac 100644 --- a/regression_test/objidOper/Makefile +++ b/regression_test/objidOper/Makefile @@ -9,6 +9,7 @@ # Balasko, Jeno # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -28,6 +29,11 @@ GENERATED_SOURCES := $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) $(USER_SOURCES:.cc=.o) diff --git a/regression_test/octetstrOper/Makefile b/regression_test/octetstrOper/Makefile index ad0f22d02..a6328e417 100644 --- a/regression_test/octetstrOper/Makefile +++ b/regression_test/octetstrOper/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/omitdef/Makefile b/regression_test/omitdef/Makefile index 1ce467064..72a2a4d80 100644 --- a/regression_test/omitdef/Makefile +++ b/regression_test/omitdef/Makefile @@ -10,6 +10,7 @@ # Delic, Adam # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # Szabados, Kristof # ############################################################################## @@ -30,6 +31,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(TTCN3_MODULES:.ttcn=.hh) $(ASN1_MODULES:.asn=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif # Source & header files of Test Ports and your other modules: diff --git a/regression_test/pattern_quadruples/Makefile b/regression_test/pattern_quadruples/Makefile index 215bfd202..9384a59b5 100644 --- a/regression_test/pattern_quadruples/Makefile +++ b/regression_test/pattern_quadruples/Makefile @@ -9,6 +9,7 @@ # Balasko, Jeno # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # Zalanyi, Balazs Andor # ############################################################################## @@ -26,6 +27,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/preCompilerFlags/Makefile b/regression_test/preCompilerFlags/Makefile index a1d15312c..4b4873767 100644 --- a/regression_test/preCompilerFlags/Makefile +++ b/regression_test/preCompilerFlags/Makefile @@ -12,6 +12,7 @@ # Dimitrov, Peter # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -31,6 +32,11 @@ GENERATED_SOURCES = $(PREPROCESSED_TTCN:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/predefFunction/Makefile b/regression_test/predefFunction/Makefile index 527ff5a6d..48a991c31 100644 --- a/regression_test/predefFunction/Makefile +++ b/regression_test/predefFunction/Makefile @@ -14,6 +14,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -82,6 +83,12 @@ GENERATED_SOURCES := $(notdir $(TTCN3_MODULES:.ttcn=.cc)) GENERATED_HEADERS := $(notdir $(TTCN3_MODULES:.ttcn=.hh)) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) +COMPILER_FLAGS += $(SPLIT_FLAG) endif # Source & header files of Test Ports and your other modules: diff --git a/regression_test/profiler/Makefile b/regression_test/profiler/Makefile index dc51e7aa4..26e3607d8 100644 --- a/regression_test/profiler/Makefile +++ b/regression_test/profiler/Makefile @@ -8,6 +8,7 @@ # Contributors: # Balasko, Jeno # Baranyi, Botond +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -25,6 +26,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif USER_SOURCES = PIPEasp_PT.cc @@ -43,6 +49,12 @@ PROF_TTCN3_LIB = ttcn3$(RT2_SUFFIX)-parallel$(DYNAMIC_SUFFIX) PROF_GENERATED_SOURCES = $(PROF_MODULES:.ttcn=.cc) PROF_GENERATED_HEADERS = $(PROF_GENERATED_SOURCES:.cc=.hh) +ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +PROF_GENERATED_SOURCES2 := $(foreach file, $(PROF_GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +PROF_GENERATED_SOURCES += $(PROF_GENERATED_SOURCES2) +endif PROF_OBJECTS = $(PROF_GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/recofOper/Makefile b/regression_test/recofOper/Makefile index 9b10e78c0..301277182 100644 --- a/regression_test/recofOper/Makefile +++ b/regression_test/recofOper/Makefile @@ -12,6 +12,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -37,6 +38,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/recordOper/Makefile b/regression_test/recordOper/Makefile index a00d2a448..e30fb8329 100644 --- a/regression_test/recordOper/Makefile +++ b/regression_test/recordOper/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/setOper/Makefile b/regression_test/setOper/Makefile index d4290fe8d..a3fdbe88d 100644 --- a/regression_test/setOper/Makefile +++ b/regression_test/setOper/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/setofMatch/Makefile b/regression_test/setofMatch/Makefile index 091a2658a..8a5d1b626 100644 --- a/regression_test/setofMatch/Makefile +++ b/regression_test/setofMatch/Makefile @@ -12,6 +12,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -29,6 +30,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/setofOper/Makefile b/regression_test/setofOper/Makefile index 6dc563a13..03266d33b 100644 --- a/regression_test/setofOper/Makefile +++ b/regression_test/setofOper/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/slider/Makefile b/regression_test/slider/Makefile index ceb717e94..940293a19 100644 --- a/regression_test/slider/Makefile +++ b/regression_test/slider/Makefile @@ -10,6 +10,7 @@ # Balasko, Jeno # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -64,7 +65,12 @@ ASN1_MODULES = # this project: GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) - +ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) +endif # C/C++ Source & header files of Test Ports, external functions and # other modules: USER_SOURCES = PT1.cc UNDER.cc diff --git a/regression_test/templateAnytype/Makefile b/regression_test/templateAnytype/Makefile index 2b82b56d8..fe7ce46a3 100644 --- a/regression_test/templateAnytype/Makefile +++ b/regression_test/templateAnytype/Makefile @@ -8,6 +8,7 @@ # Contributors: # Balasko, Jeno # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -24,6 +25,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/templateBitstr/Makefile b/regression_test/templateBitstr/Makefile index fd94be3ba..c934bada2 100644 --- a/regression_test/templateBitstr/Makefile +++ b/regression_test/templateBitstr/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/templateBool/Makefile b/regression_test/templateBool/Makefile index 94c9c2be7..ba6004279 100644 --- a/regression_test/templateBool/Makefile +++ b/regression_test/templateBool/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/templateChar/Makefile b/regression_test/templateChar/Makefile index 52ff300b9..1399d234c 100644 --- a/regression_test/templateChar/Makefile +++ b/regression_test/templateChar/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/templateCharstr/Makefile b/regression_test/templateCharstr/Makefile index f8cff2327..72be5a21b 100644 --- a/regression_test/templateCharstr/Makefile +++ b/regression_test/templateCharstr/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/templateEnum/Makefile b/regression_test/templateEnum/Makefile index 77b3b7bfd..135a98e68 100644 --- a/regression_test/templateEnum/Makefile +++ b/regression_test/templateEnum/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/templateFloat/Makefile b/regression_test/templateFloat/Makefile index ae2d7b0ea..87232cc0e 100644 --- a/regression_test/templateFloat/Makefile +++ b/regression_test/templateFloat/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/templateHexstr/Makefile b/regression_test/templateHexstr/Makefile index cdc6aae3b..bd9213e1d 100644 --- a/regression_test/templateHexstr/Makefile +++ b/regression_test/templateHexstr/Makefile @@ -7,6 +7,7 @@ # # Contributors: # Baranyi, Botond – initial implementation +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -23,6 +24,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/templateInt/Makefile b/regression_test/templateInt/Makefile index 6c1fc7444..ecab0730c 100644 --- a/regression_test/templateInt/Makefile +++ b/regression_test/templateInt/Makefile @@ -12,6 +12,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -29,6 +30,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/templateOctetstr/Makefile b/regression_test/templateOctetstr/Makefile index de278d959..3950333fc 100644 --- a/regression_test/templateOctetstr/Makefile +++ b/regression_test/templateOctetstr/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/templateOmit/LegacyTests/Makefile b/regression_test/templateOmit/LegacyTests/Makefile index 6d7d5e482..145258c29 100644 --- a/regression_test/templateOmit/LegacyTests/Makefile +++ b/regression_test/templateOmit/LegacyTests/Makefile @@ -8,6 +8,7 @@ # Contributors: # Balasko, Jeno # Baranyi, Botond +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../.. @@ -26,6 +27,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/templateOmit/NewTests/Makefile b/regression_test/templateOmit/NewTests/Makefile index c2d82294c..92c148737 100644 --- a/regression_test/templateOmit/NewTests/Makefile +++ b/regression_test/templateOmit/NewTests/Makefile @@ -8,6 +8,7 @@ # Contributors: # Balasko, Jeno # Baranyi, Botond +# Szabo, Bence Janos # ############################################################################## TOPDIR := ../.. @@ -26,6 +27,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/templateRec/Makefile b/regression_test/templateRec/Makefile index 10888b9df..9ad7ee18c 100644 --- a/regression_test/templateRec/Makefile +++ b/regression_test/templateRec/Makefile @@ -12,6 +12,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -34,6 +35,11 @@ COMPILER_FLAGS += -M ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/templateRecof/Makefile b/regression_test/templateRecof/Makefile index a583290b8..ab64eeefc 100644 --- a/regression_test/templateRecof/Makefile +++ b/regression_test/templateRecof/Makefile @@ -12,6 +12,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -29,6 +30,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/templateSet/Makefile b/regression_test/templateSet/Makefile index b441625ff..8d46b980f 100644 --- a/regression_test/templateSet/Makefile +++ b/regression_test/templateSet/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/templateSetof/Makefile b/regression_test/templateSetof/Makefile index b9154d56d..9753461eb 100644 --- a/regression_test/templateSetof/Makefile +++ b/regression_test/templateSetof/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/templateUnicharstr/Makefile b/regression_test/templateUnicharstr/Makefile index 9a99c779b..d29946581 100644 --- a/regression_test/templateUnicharstr/Makefile +++ b/regression_test/templateUnicharstr/Makefile @@ -7,6 +7,7 @@ # # Contributors: # Botond, Baranyi – initial implementation +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -23,6 +24,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/templateUnion/Makefile b/regression_test/templateUnion/Makefile index ea2dc17b8..4565c66c2 100644 --- a/regression_test/templateUnion/Makefile +++ b/regression_test/templateUnion/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/testcase_defparam/Makefile b/regression_test/testcase_defparam/Makefile index 63954cad3..e2f7625d3 100644 --- a/regression_test/testcase_defparam/Makefile +++ b/regression_test/testcase_defparam/Makefile @@ -10,6 +10,7 @@ # Balasko, Jeno # Baranyi, Botond # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -62,7 +63,12 @@ ASN1_MODULES = # this project: GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) - +ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) +endif # C/C++ Source & header files of Test Ports, external functions and # other modules: USER_SOURCES = diff --git a/regression_test/text2ttcn/Makefile b/regression_test/text2ttcn/Makefile index a643db2f5..bf55c5beb 100644 --- a/regression_test/text2ttcn/Makefile +++ b/regression_test/text2ttcn/Makefile @@ -48,12 +48,12 @@ all: $(GENERATED_DIRS) $(DIR_SINGLE): mkdir $@ cd $@ && for file in $(SINGLE_FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) -sM -e $(RUNNABLE) ./* && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) $(SPLIT_FLAG) -sM -e $(RUNNABLE) ./* && $(MAKE_PROG) $(DIR_PARALLEL): mkdir $@ cd $@ && for file in $(PARALLEL_FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) -M -e $(RUNNABLE) ./* && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) $(SPLIT_FLAG) -M -e $(RUNNABLE) ./* && $(MAKE_PROG) run: $(GENERATED_DIRS) cd $(DIR_SINGLE) && ./$(RUNNABLE) $(SINGLE_CFG) && grep "Overall verdict: pass" *.log diff --git a/regression_test/transparent/Makefile b/regression_test/transparent/Makefile index 4c7456be9..e1842b782 100644 --- a/regression_test/transparent/Makefile +++ b/regression_test/transparent/Makefile @@ -9,6 +9,7 @@ # Baji, Laszlo # Balasko, Jeno # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -71,7 +72,12 @@ ASN1_MODULES = # this project: GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) - +ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) +endif # C/C++ Source & header files of Test Ports, external functions and # other modules: USER_SOURCES = diff --git a/regression_test/tryCatch/Makefile b/regression_test/tryCatch/Makefile index 032c5a965..fa23d0391 100644 --- a/regression_test/tryCatch/Makefile +++ b/regression_test/tryCatch/Makefile @@ -7,6 +7,7 @@ # # Contributors: # Balasko, Jeno +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -26,6 +27,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(TTCN3_MODULES:.ttcn=.hh) $(ASN1_MODULES:.asn=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif USER_SOURCES = external_function.cc PCOType.cc diff --git a/regression_test/ttcn2json/Makefile b/regression_test/ttcn2json/Makefile index 751baf1cd..9f87fc117 100644 --- a/regression_test/ttcn2json/Makefile +++ b/regression_test/ttcn2json/Makefile @@ -8,6 +8,7 @@ # Contributors: # Balasko, Jeno # Baranyi, Botond +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -26,6 +27,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif USER_SOURCES = PIPEasp_PT.cc f_ext_import_schema.cc diff --git a/regression_test/typeCompat/Makefile b/regression_test/typeCompat/Makefile index f8733648c..c11d5d862 100644 --- a/regression_test/typeCompat/Makefile +++ b/regression_test/typeCompat/Makefile @@ -10,6 +10,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -33,6 +34,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(TTCN3_MODULES:.ttcn=.hh) $(ASN1_MODULES:.asn=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif USER_SOURCES = diff --git a/regression_test/ucharstrOper/Makefile b/regression_test/ucharstrOper/Makefile index bdc679af6..134d46fa8 100644 --- a/regression_test/ucharstrOper/Makefile +++ b/regression_test/ucharstrOper/Makefile @@ -28,6 +28,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif USER_SOURCES = external.cc diff --git a/regression_test/uidChars/Makefile b/regression_test/uidChars/Makefile index 940f663de..1d6671eea 100644 --- a/regression_test/uidChars/Makefile +++ b/regression_test/uidChars/Makefile @@ -23,6 +23,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif USER_SOURCES = diff --git a/regression_test/unionOper/Makefile b/regression_test/unionOper/Makefile index 0ff192cfc..95d6861ce 100644 --- a/regression_test/unionOper/Makefile +++ b/regression_test/unionOper/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/verdictOper/Makefile b/regression_test/verdictOper/Makefile index 72a88aa31..1e480b612 100644 --- a/regression_test/verdictOper/Makefile +++ b/regression_test/verdictOper/Makefile @@ -11,6 +11,7 @@ # Kovacs, Ferenc # Raduly, Csaba # Szabados, Kristof +# Szabo, Bence Janos # Szabo, Janos Zoltan – initial implementation # ############################################################################## @@ -28,6 +29,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/regression_test/visibility/Makefile b/regression_test/visibility/Makefile index d66454e13..3718c74ff 100644 --- a/regression_test/visibility/Makefile +++ b/regression_test/visibility/Makefile @@ -10,6 +10,7 @@ # Czerman, Oliver # Kovacs, Ferenc # Raduly, Csaba +# Szabo, Bence Janos # ############################################################################## TOPDIR := .. @@ -26,6 +27,11 @@ GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) endif OBJECTS = $(GENERATED_SOURCES:.cc=.o) diff --git a/usrguide/referenceguide.doc b/usrguide/referenceguide.doc index b10a84cac88c9b07aa60bed6b64280a25a765140..5fb6ad7ba2f806cdc0c3f72b50bd1c862b1864f8 100644 GIT binary patch delta 125378 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î!M|cF$H$u<^t<e?TFbG31 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 delta 121228 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%0AR8yte8g6yG;!U=aG*=4cPzhDw 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 V;@)MwbMu0w!P4-ZRe^cF{{i&n4(R{@ -- GitLab