From 84e034353138ae1d870dbc3be66dfe1d58da1e86 Mon Sep 17 00:00:00 2001 From: Ludovic Apvrille <ludovic.apvrille@telecom-paristech.fr> Date: Wed, 30 Mar 2011 08:49:50 +0000 Subject: [PATCH] AVATAR: executable code update --- executablecode/generated_src/main.c | 2 -- .../toexecutable/AVATAR2CPOSIX.java | 33 +++++++++++-------- .../toexecutable/MainFile.java | 25 ++++++++++++-- 3 files changed, 43 insertions(+), 17 deletions(-) diff --git a/executablecode/generated_src/main.c b/executablecode/generated_src/main.c index 349fe13fa6..bce8999af4 100644 --- a/executablecode/generated_src/main.c +++ b/executablecode/generated_src/main.c @@ -9,6 +9,4 @@ #include "debug.h" int main(int argc, char *argv[]) { - - } \ No newline at end of file diff --git a/src/avatartranslator/toexecutable/AVATAR2CPOSIX.java b/src/avatartranslator/toexecutable/AVATAR2CPOSIX.java index d5bb1077c5..75cdcbb1bf 100755 --- a/src/avatartranslator/toexecutable/AVATAR2CPOSIX.java +++ b/src/avatartranslator/toexecutable/AVATAR2CPOSIX.java @@ -54,17 +54,7 @@ import avatartranslator.*; public class AVATAR2CPOSIX { private final static String UNKNOWN = "UNKNOWN"; - - - private final static String BOOLEAN_DATA_HEADER = "(* Boolean return types *)\ndata true/0.\ndata false/0.\n"; - private final static String FUNC_DATA_HEADER = "(* Functions data *)\ndata " + UNKNOWN + "/0.\n"; - - private final static String PK_HEADER = "(* Public key cryptography *)\nfun pk/1.\nfun encrypt/2.\nreduc decrypt(encrypt(x,pk(y)),y) = x.\n"; - private final static String SK_HEADER = "(* Symmetric key cryptography *)\nfun sencrypt/2.\nreduc sdecrypt(sencrypt(x,k),k) = x.\n"; - private final static String MAC_HEADER = "(* MAC *)\nfun MAC/2.\nreduc verifyMAC(m, k, MAC(m, k)) = true.\n"; - private final static String CONCAT_HEADER = "(* CONCAT *)\nfun concat/5.\nreduc get1(concat(m1, m2, m3, m4, m5))= m1.\nreduc get2(concat(m1, m2, m3, m4, m5))= m2.\nreduc get3(concat(m1, m2, m3, m4, m5))= m3.\nreduc get4(concat(m1, m2, m3, m4, m5))= m4.\nreduc get5(concat(m1, m2, m3, m4, m5))= m5.\n"; - - private final static String MAIN_DEC = "int main(int argc, char *argv[]) {\n"; + private final static String CR = "\n"; private AvatarSpecification avspec; @@ -95,8 +85,25 @@ public class AVATAR2CPOSIX { public void generateCPOSIX(boolean _debug) { mainFile = new MainFile("main"); - - + + // Create a main mutex + mainFile.appendToHCode("/* Main mutex */" + CR); + mainFile.appendToBeforeMainCode("/* Main mutex */" + CR); + mainFile.appendToHCode("extern pthread_mutex_t mainMutex;" + CR + CR); + mainFile.appendToBeforeMainCode("pthread_mutex_t mainMutex;" + CR + CR); + + + // Create a synchronous channel per relation/signal + mainFile.appendToHCode("/* Synchronous channels */" + CR); + mainFile.appendToBeforeMainCode("/* Synchronous channels */" + CR); + for(AvatarRelation ar: avspec.getRelations()) { + if (!ar.isAsynchronous()) { + + } + } + + //mainFile.appendToHCode("pthread_mutex_t mainMutex;" + CR); + } } \ No newline at end of file diff --git a/src/avatartranslator/toexecutable/MainFile.java b/src/avatartranslator/toexecutable/MainFile.java index fb05cdc863..daef103b13 100755 --- a/src/avatartranslator/toexecutable/MainFile.java +++ b/src/avatartranslator/toexecutable/MainFile.java @@ -52,6 +52,9 @@ import myutil.*; import avatartranslator.*; public class MainFile { + + private final static String H_DEF = "#ifndef MAIN_H\n#define MAIN_H\n"; + private final static String H_END_DEF = "#endif\n"; private final static String INCLUDE_HEADER = "#include <stdio.h>\n#include <pthread.h>\n#include <unistd.h>\n#include <stdlib.h>\n"; private final static String LOCAL_INCLUDE_HEADER = "#include \"request.h\"\n#include \"syncchannel.h\"\n#include \"request_manager.h\"\n#include \"debug.h\""; @@ -60,23 +63,41 @@ public class MainFile { private final static String CR = "\n"; private String name; + private String hCode; + private String beforeMainCode; + private String mainCode; public MainFile(String _name) { name = _name; + hCode = ""; + mainCode = ""; } public String getName() { return name; } + public void appendToHCode(String _code) { + hCode += _code; + } + + public void appendToBeforeMainCode(String _code) { + beforeMainCode += _code; + } + + public void appendToMainCode(String _code) { + mainCode += _code; + } + public String getHeaderCode() { - return ""; + return H_DEF + hCode + H_END_DEF; } public String getMainCode() { String s = INCLUDE_HEADER + "\n" + LOCAL_INCLUDE_HEADER + CR + CR; - s += MAIN_DEC + CR + CR + "}" + CR; + s += beforeMainCode + CR; + s += MAIN_DEC + CR + mainCode + CR + "}" + CR; return s; -- GitLab