diff --git a/TorcsEMAMGenerator/experiments.iml b/TorcsEMAMGenerator/experiments.iml index 507396e492311fad7dc0e4ac707c4bf926fc36f1..725b009c06a5b069ae5ad33e4c150c6d26ffad1d 100644 --- a/TorcsEMAMGenerator/experiments.iml +++ b/TorcsEMAMGenerator/experiments.iml @@ -12,9 +12,11 @@ </content> <orderEntry type="inheritedJdk" /> <orderEntry type="sourceFolder" forTests="false" /> - <orderEntry type="library" name="Maven: de.monticore.lang.monticar:embedded-montiarc-math-generator:0.0.6-SNAPSHOT" level="project" /> + <orderEntry type="library" name="Maven: de.monticore.lang.monticar:embedded-montiarc:0.0.11c-SNAPSHOT" level="project" /> <orderEntry type="library" name="Maven: org.antlr:antlr4-runtime:4.7.1" level="project" /> <orderEntry type="library" name="Maven: de.monticore.lang:Tagging:0.0.1" level="project" /> + <orderEntry type="library" name="Maven: de.monticore.lang.monticar:struct:0.0.10-SNAPSHOT" level="project" /> + <orderEntry type="library" name="Maven: de.monticore.lang.monticar:enum:0.0.10-SNAPSHOT" level="project" /> <orderEntry type="library" name="Maven: de.se_rwth.commons:se-commons-logging:1.7.7" level="project" /> <orderEntry type="library" name="Maven: de.se_rwth.commons:se-commons-utilities:1.7.7" level="project" /> <orderEntry type="library" name="Maven: javax.inject:javax.inject:1" level="project" /> @@ -25,7 +27,6 @@ <orderEntry type="library" name="Maven: org.javassist:javassist:3.18.2-GA" level="project" /> <orderEntry type="library" name="Maven: com.google.code.findbugs:annotations:2.0.1" level="project" /> <orderEntry type="library" name="Maven: commons-io:commons-io:2.4" level="project" /> - <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.0" level="project" /> <orderEntry type="library" name="Maven: org.antlr:antlr4:4.5.1" level="project" /> <orderEntry type="library" name="Maven: de.monticore:monticore-grammar:4.5.4-SNAPSHOT" level="project" /> <orderEntry type="library" name="Maven: de.monticore:monticore-emf-runtime:4.5.4-SNAPSHOT" level="project" /> @@ -43,14 +44,17 @@ <orderEntry type="library" name="Maven: org.mod4j.org.eclipse.equinox:app:1.2.0" level="project" /> <orderEntry type="library" name="Maven: org.mod4j.org.eclipse.emf.ecore:xmi:2.5.0" level="project" /> <orderEntry type="library" name="Maven: org.mod4j.org.eclipse.emf:common:2.5.0" level="project" /> + <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.0" level="project" /> <orderEntry type="library" name="Maven: de.se_rwth.commons:se-commons-groovy:1.7.7" level="project" /> <orderEntry type="library" name="Maven: org.codehaus.groovy:groovy:2.3.7" level="project" /> <orderEntry type="library" name="Maven: jline:jline:2.12" level="project" /> <orderEntry type="library" name="Maven: de.monticore.lang:NumberUnit:0.0.10-SNAPSHOT" level="project" /> <orderEntry type="library" name="Maven: de.monticore.lang.monticar:common-monticar:0.0.10-SNAPSHOT" level="project" /> - <orderEntry type="library" name="Maven: de.monticore.lang.monticar:embedded-montiarc:0.0.10-SNAPSHOT" level="project" /> - <orderEntry type="library" name="Maven: de.monticore.lang.monticar:struct:0.0.10-SNAPSHOT" level="project" /> - <orderEntry type="library" name="Maven: de.monticore.lang.monticar:enum:0.0.10-SNAPSHOT" level="project" /> + <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.1.2" level="project" /> + <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.1.2" level="project" /> + <orderEntry type="library" name="Maven: org.jscience:jscience:4.3.1" level="project" /> + <orderEntry type="library" name="Maven: org.javolution:javolution:5.2.3" level="project" /> + <orderEntry type="library" name="Maven: de.monticore.lang.monticar:embedded-montiarc-math-generator:0.0.6-SNAPSHOT" level="project" /> <orderEntry type="library" name="Maven: de.monticore.lang.monticar:embedded-montiarc-behaviour:0.0.10-SNAPSHOT" level="project" /> <orderEntry type="library" name="Maven: de.monticore.lang.monticar:embedded-montiarc-math:0.0.10-SNAPSHOT" level="project" /> <orderEntry type="library" name="Maven: de.monticore.lang:math:0.0.10-SNAPSHOT" level="project" /> @@ -72,15 +76,10 @@ <orderEntry type="library" name="Maven: de.monticore:monticore-grammar:grammars:4.5.2" level="project" /> <orderEntry type="library" name="Maven: org.freemarker:freemarker:2.3.23" level="project" /> <orderEntry type="library" name="Maven: commons-cli:commons-cli:1.4" level="project" /> - <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.1.2" level="project" /> - <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.1.2" level="project" /> - <orderEntry type="library" name="Maven: org.jscience:jscience:4.3.1" level="project" /> - <orderEntry type="library" name="Maven: org.javolution:javolution:5.2.3" level="project" /> - <orderEntry type="library" name="Maven: de.moticore.lang.monticar:embedded-montiarc-math-roscpp-generator:0.0.1-SNAPSHOT" level="project" /> + <orderEntry type="library" name="Maven: de.monticore.lang.monticar:embedded-montiarc-math-roscpp-generator:0.0.1c-SNAPSHOT" level="project" /> + <orderEntry type="library" name="Maven: de.monticore.lang.monticar:embedded-montiarc-math-rosmsg-generator:0.0.1-SNAPSHOT" level="project" /> <orderEntry type="library" name="Maven: com.esotericsoftware.yamlbeans:yamlbeans:1.12" level="project" /> <orderEntry type="library" name="Maven: de.moticore.lang.monticar:embedded-montiarc-math-middleware-generator:0.0.1-SNAPSHOT" level="project" /> <orderEntry type="library" name="Maven: org.jgrapht:jgrapht-core:1.1.0" level="project" /> - <orderEntry type="library" name="Maven: de.monticore.lang.monticar:embedded-montiarc-math-roscpp-generator:0.0.1c-SNAPSHOT" level="project" /> - <orderEntry type="library" name="Maven: de.monticore.lang.monticar:embedded-montiarc-math-rosmsg-generator:0.0.1-SNAPSHOT" level="project" /> </component> </module> \ No newline at end of file diff --git a/TorcsEMAMGenerator/pom.xml b/TorcsEMAMGenerator/pom.xml index 4a45d59b19db3ec7b676d1a07c134e658cf9fbe4..d3664db0e7c3e34ce7c44ef43db44bb0f93ff80a 100644 --- a/TorcsEMAMGenerator/pom.xml +++ b/TorcsEMAMGenerator/pom.xml @@ -21,15 +21,20 @@ </build> <dependencies> + <dependency> + <groupId>de.monticore.lang.monticar</groupId> + <artifactId>embedded-montiarc</artifactId> + <version>0.0.11c-SNAPSHOT</version> + </dependency> <dependency> <groupId>de.monticore.lang.monticar</groupId> <artifactId>embedded-montiarc-math-generator</artifactId> <version>0.0.6-SNAPSHOT</version> </dependency> <dependency> - <groupId>de.moticore.lang.monticar</groupId> + <groupId>de.monticore.lang.monticar</groupId> <artifactId>embedded-montiarc-math-roscpp-generator</artifactId> - <version>0.0.1-SNAPSHOT</version> + <version>0.0.1c-SNAPSHOT</version> </dependency> <dependency> <groupId>de.moticore.lang.monticar</groupId> diff --git a/TorcsEMAMGenerator/resources/dp/Imagepreprocessing.emam b/TorcsEMAMGenerator/resources/dp/Imagepreprocessing.emam index 6604b45552133e3cb1d71a7baa7697d80350b187..9e00ff3ea0bfbf6dcb172181e36030b72f82e46e 100644 --- a/TorcsEMAMGenerator/resources/dp/Imagepreprocessing.emam +++ b/TorcsEMAMGenerator/resources/dp/Imagepreprocessing.emam @@ -1,7 +1,10 @@ package dp; component Imagepreprocessing { -ports - in Z(0:255)^{3, 224, 224} imageIn, - out Z(0:255)^{3, 224, 224} imageOut; +ports in Q^{3,224} in1, + in Z^{3,224} in2, + //in B^{3,224} in3, + out Q^{3,224} out1, + out Z^{3,224} out2; + //out B^{3,224} out3; } diff --git a/TorcsEMAMGenerator/resources/dp/Imagepreprocessing.tag b/TorcsEMAMGenerator/resources/dp/Imagepreprocessing.tag new file mode 100644 index 0000000000000000000000000000000000000000..dbf86bc4a3468a0c2bae9b1ad95bca83e535d46e --- /dev/null +++ b/TorcsEMAMGenerator/resources/dp/Imagepreprocessing.tag @@ -0,0 +1,11 @@ +package dp; +conforms to de.monticore.lang.monticar.generator.roscpp.RosToEmamTagSchema; + +tags Imagepreprocessing { + tag imagepreprocessing.in1 with RosConnection = {topic=(/topicName1,std_msgs/Float64MultiArray)}; + tag imagepreprocessing.in2 with RosConnection = {topic=(/topicName2,std_msgs/Int32MultiArray)}; + //tag imagepreprocessing.in3 with RosConnection = {topic=(/topicName3,std_msgs/ByteMultiArray)}; + tag imagepreprocessing.out1 with RosConnection = {topic=(/topicName4,std_msgs/Float64MultiArray)}; + tag imagepreprocessing.out2 with RosConnection = {topic=(/topicName5,std_msgs/Int32MultiArray)}; + //tag imagepreprocessing.out3 with RosConnection = {topic=(/topicName6,std_msgs/ByteMultiArray)}; +} diff --git a/TorcsEMAMGenerator/src/main/java/de/monticore/lang/monticar/torcs_dl/Experiments.java b/TorcsEMAMGenerator/src/main/java/de/monticore/lang/monticar/torcs_dl/Experiments.java index d171624cdb4bcb301ea7818564328330848c4b9a..05064b318d08721a63ec22a341d86e8a54ac0562 100644 --- a/TorcsEMAMGenerator/src/main/java/de/monticore/lang/monticar/torcs_dl/Experiments.java +++ b/TorcsEMAMGenerator/src/main/java/de/monticore/lang/monticar/torcs_dl/Experiments.java @@ -1,7 +1,10 @@ package de.monticore.lang.monticar.torcs_dl; import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.ExpandedComponentInstanceSymbol; -import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.PortSymbol; +import de.monticore.lang.embeddedmontiarc.tagging.RosToEmamTagSchema; +import de.monticore.lang.monticar.generator.middleware.MiddlewareGenerator; +import de.monticore.lang.monticar.generator.middleware.impls.CPPGenImpl; +import de.monticore.lang.monticar.generator.middleware.impls.RosCppGenImpl; import de.monticore.lang.monticar.generator.order.nfp.TagBreakpointsTagSchema.TagBreakpointsTagSchema; import de.monticore.lang.monticar.generator.order.nfp.TagDelayTagSchema.TagDelayTagSchema; import de.monticore.lang.monticar.generator.order.nfp.TagExecutionOrderTagSchema.TagExecutionOrderTagSchema; @@ -9,18 +12,13 @@ import de.monticore.lang.monticar.generator.order.nfp.TagInitTagSchema.TagInitTa import de.monticore.lang.monticar.generator.order.nfp.TagMinMaxTagSchema.TagMinMaxTagSchema; import de.monticore.lang.monticar.generator.order.nfp.TagTableTagSchema.TagTableTagSchema; import de.monticore.lang.monticar.generator.order.nfp.TagThresholdTagSchema.TagThresholdTagSchema; -import de.monticore.lang.monticar.generator.roscpp.GeneratorRosCpp; -import de.monticore.lang.monticar.generator.roscpp.helper.YamlHelper; -import de.monticore.lang.monticar.generator.roscpp.tagging.RosToEmamTagSchema; -import de.monticore.lang.monticar.generator.rosmsg.GeneratorRosMsg; +import de.monticore.lang.monticar.generator.roscpp.helper.TagHelper; import de.monticore.lang.tagging._symboltable.TaggingResolver; import de.monticore.symboltable.Scope; -import java.io.File; import java.io.IOException; -import java.util.Collections; +import java.util.Arrays; import java.util.LinkedList; -import java.util.List; import static de.monticore.lang.monticar.generator.order.simulator.AbstractSymtab.createSymTab; @@ -28,20 +26,34 @@ public class Experiments { public static void main(String[] args) { System.out.println("Experiments!"); + //--- + Scope scope = createSymTab("resources"); - TaggingResolver symtab = new TaggingResolver(scope, Collections.singletonList("resources")); - TagMinMaxTagSchema.registerTagTypes(symtab); - TagTableTagSchema.registerTagTypes(symtab); - TagBreakpointsTagSchema.registerTagTypes(symtab); - TagExecutionOrderTagSchema.registerTagTypes(symtab); - TagInitTagSchema.registerTagTypes(symtab); - TagThresholdTagSchema.registerTagTypes(symtab); - TagDelayTagSchema.registerTagTypes(symtab); + TaggingResolver taggingResolver = new TaggingResolver(scope, Arrays.asList("resources")); + TagMinMaxTagSchema.registerTagTypes(taggingResolver); + TagTableTagSchema.registerTagTypes(taggingResolver); + TagBreakpointsTagSchema.registerTagTypes(taggingResolver); + TagExecutionOrderTagSchema.registerTagTypes(taggingResolver); + TagInitTagSchema.registerTagTypes(taggingResolver); + TagThresholdTagSchema.registerTagTypes(taggingResolver); + TagDelayTagSchema.registerTagTypes(taggingResolver); + + RosToEmamTagSchema.registerTagTypes(taggingResolver); + + MiddlewareGenerator middlewareGenerator = new MiddlewareGenerator(); + + middlewareGenerator.add(new CPPGenImpl(), "cpp"); + middlewareGenerator.add(new RosCppGenImpl(), "roscpp"); - RosToEmamTagSchema.registerTagTypes(symtab); - GeneratorRosCpp generatorRosCpp = new GeneratorRosCpp(); - GeneratorRosMsg generatorRosMsg = new GeneratorRosMsg(); +// DistributedTargetGenerator distributedTargetGenerator = new DistributedTargetGenerator(); +// +// distributedTargetGenerator.add(new CPPGenImpl(), "cpp"); +// distributedTargetGenerator.add(new RosCppGenImpl(), "roscpp"); + + +// GeneratorRosCpp generatorRosCpp = new GeneratorRosCpp(); +// GeneratorRosMsg generatorRosMsg = new GeneratorRosMsg(); LinkedList<String> inputs = new LinkedList<String>(); inputs.add("Imagepreprocessing"); @@ -53,19 +65,29 @@ public class Experiments { for (String inpu : inputs) { System.out.println("Generating for " + inpu); - ExpandedComponentInstanceSymbol component = symtab.<ExpandedComponentInstanceSymbol>resolve("dp."+inpu.toLowerCase(), ExpandedComponentInstanceSymbol.KIND).orElse(null); - generatorRosMsg.setTarget("generated/", inpu); + ExpandedComponentInstanceSymbol componentInstanceSymbol = taggingResolver.<ExpandedComponentInstanceSymbol>resolve("dp."+inpu.toLowerCase(), ExpandedComponentInstanceSymbol.KIND).orElse(null); + + TagHelper.resolveTags(taggingResolver, componentInstanceSymbol); + + middlewareGenerator.setGenerationTargetPath("generated/"+inpu); + middlewareGenerator.generate(componentInstanceSymbol, taggingResolver); - for(PortSymbol port : component.getPorts()) { - List<File> msgFiles = generatorRosMsg.generate(port.getTypeReference()); - System.out.println(" Msg files: " + msgFiles.toString()); - } +// distributedTargetGenerator.setGenerationTargetPath("generated/"+inpu); +// distributedTargetGenerator.generate(componentInstanceSymbol, symtab); - generatorRosCpp.setGenerationTargetPath("generated/"+inpu); - List<File> files = YamlHelper.generateFromFile("resources/config/"+inpu+".yaml", symtab, generatorRosCpp); - for (File f : files) { - System.out.println(" " + f.toString()); - } +// ExpandedComponentInstanceSymbol component = symtab.<ExpandedComponentInstanceSymbol>resolve("dp."+inpu.toLowerCase(), ExpandedComponentInstanceSymbol.KIND).orElse(null); +// generatorRosMsg.setTarget("generated/", inpu); +// +// for(PortSymbol port : component.getPorts()) { +// List<File> msgFiles = generatorRosMsg.generate(port.getTypeReference()); +// System.out.println(" Msg files: " + msgFiles.toString()); +// } +// +// generatorRosCpp.setGenerationTargetPath("generated/"+inpu); +// List<File> files = YamlHelper.generateFromFile("resources/config/"+inpu+".yaml", symtab, generatorRosCpp); +// for (File f : files) { +// System.out.println(" " + f.toString()); +// } } } catch (IOException e) { diff --git a/TorcsEMAMGenerator/src/main/resources/de/monticore/lang/monticar/generator/middleware/IAdapterTemplate.ftl b/TorcsEMAMGenerator/src/main/resources/de/monticore/lang/monticar/generator/middleware/IAdapterTemplate.ftl new file mode 100644 index 0000000000000000000000000000000000000000..249275bbd1bec15c4cf4280b1298efa0e900966f --- /dev/null +++ b/TorcsEMAMGenerator/src/main/resources/de/monticore/lang/monticar/generator/middleware/IAdapterTemplate.ftl @@ -0,0 +1,9 @@ +#pragma once +#include "${compName}.h" + +class IAdapter_${compName}{ + public: + virtual ~IAdapter_${compName}(){} + virtual void init(${compName}* comp) = 0; + virtual void tick() = 0; +}; diff --git a/TorcsEMAMGenerator/src/main/resources/de/monticore/lang/monticar/generator/middleware/cmakeCppTemplate.ftl b/TorcsEMAMGenerator/src/main/resources/de/monticore/lang/monticar/generator/middleware/cmakeCppTemplate.ftl new file mode 100644 index 0000000000000000000000000000000000000000..a602a4e1aa7feeaa9e91f7fdd6cd8a49d5b04116 --- /dev/null +++ b/TorcsEMAMGenerator/src/main/resources/de/monticore/lang/monticar/generator/middleware/cmakeCppTemplate.ftl @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 3.5) +project(${compName} LANGUAGES CXX) +add_library(${compName} ${compName}.h) +target_include_directories(${compName} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) +set_target_properties(${compName} PROPERTIES LINKER_LANGUAGE CXX) +export(TARGETS ${compName} FILE ${compName}.cmake) diff --git a/TorcsEMAMGenerator/src/main/resources/de/monticore/lang/monticar/generator/middleware/coordinatorCmakeListsTemplate.ftl b/TorcsEMAMGenerator/src/main/resources/de/monticore/lang/monticar/generator/middleware/coordinatorCmakeListsTemplate.ftl new file mode 100644 index 0000000000000000000000000000000000000000..b54f386045454c5fc142eaa774e7ae22fde76806 --- /dev/null +++ b/TorcsEMAMGenerator/src/main/resources/de/monticore/lang/monticar/generator/middleware/coordinatorCmakeListsTemplate.ftl @@ -0,0 +1,13 @@ +cmake_minimum_required(VERSION 3.5) +project (Coordinator_${compName} CXX) + +set (CMAKE_CXX_STANDARD 11) +set (THREADS_PREFER_PTHREAD_FLAG ON) +find_package(Threads REQUIRED) + +add_executable(Coordinator_${compName} Coordinator_${compName}.cpp) +set_target_properties(Coordinator_${compName} PROPERTIES LINKER_LANGUAGE CXX) +target_link_libraries(Coordinator_${compName} ${targets} Threads::Threads) +target_include_directories(Coordinator_${compName} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + +export(TARGETS Coordinator_${compName} FILE Coordinator_${compName}.cmake) \ No newline at end of file diff --git a/TorcsEMAMGenerator/src/main/resources/de/monticore/lang/monticar/generator/middleware/coordinatorTemplate.ftl b/TorcsEMAMGenerator/src/main/resources/de/monticore/lang/monticar/generator/middleware/coordinatorTemplate.ftl new file mode 100644 index 0000000000000000000000000000000000000000..e76d9f9b4aafc21e58a339a088caae4b548464e3 --- /dev/null +++ b/TorcsEMAMGenerator/src/main/resources/de/monticore/lang/monticar/generator/middleware/coordinatorTemplate.ftl @@ -0,0 +1,81 @@ +#include <iostream> +#include <thread> +#include <chrono> +#include <atomic> +#include <list> +#include "IAdapter_${compName}.h" + +${includes} + +using namespace std; +using namespace chrono; + +static int exeMs = 100; + +bool parseCommandLineParameters(int argc, char* argv[]){ + if(argc == 1){ + return true; + } + if(argc == 3 && string(argv[1]) == "-t"){ + try{ + int tmp = stoi(argv[2]); + if(tmp >= 0){ + exeMs = tmp; + return true; + } + }catch(...){ + //Ignore + } + } + cout << "Usage: " << argv[0] << " [-h | -t sleepTimeMs]\n"; + return false; +} + +void startMiddleware(IAdapter_${compName}& adapter,${compName}& comp,atomic<bool>& done){ + adapter.init(&comp); + done = true; +} + +int main(int argc, char* argv[]) +{ + if(!parseCommandLineParameters(argc,argv)){ + return 1; + } + + atomic<bool> done(false); + ${compName} comp; + comp.init(); + + list<IAdapter_${compName}*> adapters; + ${addAdapters} + + list<thread*> threads; + for(auto a : adapters){ + threads.push_back(new thread(startMiddleware,ref(*a),ref(comp),ref(done))); + } + + cout << "waiting for all middleware to start\n"; + this_thread::sleep_for(seconds(3)); + cout << "started! Executing every " << exeMs << "ms\n"; + + time_point<system_clock> start, end; + while(!done){ + start = system_clock::now(); + + comp.execute(); + for(auto a : adapters){ + (*a).tick(); + } + + end = system_clock::now(); + int elapsedMs = duration_cast<milliseconds>(end-start).count(); + int newSleep = exeMs - elapsedMs; + if(newSleep <= 0){ + cout << "Cant keep up! "<< (-newSleep) <<"ms late!\n"; + }else{ + this_thread::sleep_for(milliseconds(newSleep)); + } + } + + return 0; +} \ No newline at end of file diff --git a/TorcsEMAMGenerator/src/main/resources/de/monticore/lang/monticar/generator/middleware/dummyAdapterTemplate.ftl b/TorcsEMAMGenerator/src/main/resources/de/monticore/lang/monticar/generator/middleware/dummyAdapterTemplate.ftl new file mode 100644 index 0000000000000000000000000000000000000000..0c13f49b13632762bf82a9afcf0029850dd5f9b0 --- /dev/null +++ b/TorcsEMAMGenerator/src/main/resources/de/monticore/lang/monticar/generator/middleware/dummyAdapterTemplate.ftl @@ -0,0 +1,28 @@ +#pragma once +#include "${compName}.h" +#include <thread> +#include <chrono> +#include "IAdapter_${compName}.h" + +class DummyAdapter_${compName}: public IAdapter_${compName}{ + ${compName}* component; + +public: + DummyAdapter_${compName}(){ + + } + + void tick(){ + cout << "Dummy publish data: component.out1 = "<< component->out1 << endl; + } + + void init(${compName}* comp){ + this->component = comp; + while(1){ + std::this_thread::sleep_for(std::chrono::seconds(1)); + component->in2 += 1000; + } + } + + +}; diff --git a/TorcsEMAMGenerator/src/main/resources/de/monticore/lang/monticar/generator/middleware/dummyCmakeTemplate.ftl b/TorcsEMAMGenerator/src/main/resources/de/monticore/lang/monticar/generator/middleware/dummyCmakeTemplate.ftl new file mode 100644 index 0000000000000000000000000000000000000000..59e6bb0c0a8ca7c2f31c4e4ac2fe44dea74d0c1a --- /dev/null +++ b/TorcsEMAMGenerator/src/main/resources/de/monticore/lang/monticar/generator/middleware/dummyCmakeTemplate.ftl @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.5) +project (DummyAdapter_${compName}) + +add_library(DummyAdapter_${compName} DummyAdapter_${compName}.h) +set_target_properties(DummyAdapter_${compName} PROPERTIES LINKER_LANGUAGE CXX) +target_link_libraries(DummyAdapter_${compName} ${compName}) +target_include_directories(DummyAdapter_${compName} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) +export(TARGETS DummyAdapter_${compName} FILE DummyAdapter_${compName}.cmake) diff --git a/TorcsEMAMGenerator/src/main/resources/de/monticore/lang/monticar/generator/middleware/struct_msgsCmakeTemplate.ftl b/TorcsEMAMGenerator/src/main/resources/de/monticore/lang/monticar/generator/middleware/struct_msgsCmakeTemplate.ftl new file mode 100644 index 0000000000000000000000000000000000000000..ab0cc09a2674cac800331f5dc7d781c24134a4b5 --- /dev/null +++ b/TorcsEMAMGenerator/src/main/resources/de/monticore/lang/monticar/generator/middleware/struct_msgsCmakeTemplate.ftl @@ -0,0 +1,25 @@ +cmake_minimum_required(VERSION 3.5) +project (struct_msgs) + +find_package(genmsg REQUIRED) + +FILE(GLOB MSG_FILES_RAW RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ../*/roscpp/struct_msgs/*.msg) + +#generate struct_msgs iff .msg files where found +if(MSG_FILES_RAW) +#filter: add each struct msg only once (distinct by filename without path) +foreach(CUR_MSG_FILE ${MSG_FILES_RAW}) +get_filename_component(TMP_MSG_NAME ${CUR_MSG_FILE} NAME) +IF(NOT MSG_DEFINED_${TMP_MSG}) +LIST(APPEND MSG_FILES ${CUR_MSG_FILE}) +SET(MSG_DEFINED_${TMP_MSG} TRUE) +ENDIF() +endforeach(CUR_MSG_FILE) + +#generate messages +add_message_files(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} FILES ${MSG_FILES}) +generate_messages() + +#export the include_dirs, so that other subprojects can use it +set(struct_msgs_INCLUDE_DIRS ${struct_msgs_INCLUDE_DIRS} PARENT_SCOPE) +endif()