Bläddra i källkod

Merge pull request #799 from ghalliday/main

Adds support for -main to remote compiling

Reviewed-By: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 13 år sedan
förälder
incheckning
ed99d410fa
3 ändrade filer med 34 tillägg och 9 borttagningar
  1. 13 0
      common/workunit/workunit.cpp
  2. 2 0
      common/workunit/workunit.hpp
  3. 19 9
      ecl/eclccserver/eclccserver.cpp

+ 13 - 0
common/workunit/workunit.cpp

@@ -1424,6 +1424,7 @@ public:
     virtual IStringVal& getQueryText(IStringVal &str) const;
     virtual IStringVal& getQueryShortText(IStringVal &str) const;
     virtual IStringVal& getQueryName(IStringVal &str) const;
+    virtual IStringVal & getQueryMainDefinition(IStringVal & str) const;
     virtual IStringVal& getQueryDllName(IStringVal &str) const;
     virtual unsigned getQueryDllCrc() const;
     virtual IStringVal& getQueryCppName(IStringVal &str) const;
@@ -1434,6 +1435,7 @@ public:
     virtual void        setQueryType(WUQueryType qt);
     virtual void        setQueryText(const char *pstr);
     virtual void        setQueryName(const char *);
+    virtual void        setQueryMainDefinition(const char * str);
     virtual void        addAssociatedFile(WUFileType type, const char * name, const char * ip, const char * desc, unsigned crc);
     virtual void        removeAssociatedFiles();
 };
@@ -6127,6 +6129,12 @@ IStringVal& CLocalWUQuery::getQueryName(IStringVal &str) const
     return str;
 }
 
+IStringVal & CLocalWUQuery::getQueryMainDefinition(IStringVal & str) const
+{
+    str.set(p->queryProp("@main"));
+    return str;
+}
+
 IStringVal& CLocalWUQuery::getQueryDllName(IStringVal &str) const
 {
     Owned<IConstWUAssociatedFile> entry = getAssociatedFile(FileTypeDll, 0);
@@ -6169,6 +6177,11 @@ void CLocalWUQuery::setQueryName(const char *qname)
     p->setProp("@name", qname);
 }
 
+void CLocalWUQuery::setQueryMainDefinition(const char * str)
+{
+    p->setProp("@main", str);
+}
+
 void CLocalWUQuery::addAssociatedFile(WUFileType type, const char * name, const char * ip, const char * desc, unsigned crc)
 {
     CriticalBlock block(crit);

+ 2 - 0
common/workunit/workunit.hpp

@@ -368,6 +368,7 @@ interface IConstWUQuery : extends IInterface
     virtual IConstWUAssociatedFile * getAssociatedFile(WUFileType type, unsigned index) const = 0;
     virtual IConstWUAssociatedFileIterator & getAssociatedFiles() const = 0;
     virtual IStringVal & getQueryShortText(IStringVal & str) const = 0;
+    virtual IStringVal & getQueryMainDefinition(IStringVal & str) const = 0;
 };
 
 
@@ -378,6 +379,7 @@ interface IWUQuery : extends IConstWUQuery
     virtual void setQueryName(const char * pstr) = 0;
     virtual void addAssociatedFile(WUFileType type, const char * name, const char * ip, const char * desc, unsigned crc) = 0;
     virtual void removeAssociatedFiles() = 0;
+    virtual void setQueryMainDefinition(const char * str) = 0;
 };
 
 

+ 19 - 9
ecl/eclccserver/eclccserver.cpp

@@ -94,7 +94,24 @@ class EclccCompileThread : public CInterface, implements IPooledThread
 
     bool compile(const char *wuid, const char *target, const char *targetCluster)
     {
-        StringBuffer eclccCmd("eclcc - -shared");
+        Owned<IConstWUQuery> query = workunit->getQuery();
+        if (!query)
+        {
+            reportError("Workunit does not contain a query", 2);
+            return false;
+        }
+
+        SCMStringBuffer mainDefinition;
+        SCMStringBuffer eclQuery;
+        query->getQueryText(eclQuery);
+        query->getQueryMainDefinition(mainDefinition);
+
+        StringBuffer eclccCmd("eclcc -shared");
+        if (eclQuery.length())
+            eclccCmd.append(" -");
+        if (mainDefinition.length())
+            eclccCmd.append(" -main ").append(mainDefinition);
+
         Owned<IPropertyTreeIterator> options = globals->getElements("./Option");
         ForEach(*options)
         {
@@ -117,14 +134,7 @@ class EclccCompileThread : public CInterface, implements IPooledThread
         }
         eclccCmd.appendf(" -o%s", wuid);
         eclccCmd.appendf(" -target=%s", target);
-        Owned<IConstWUQuery> query = workunit->getQuery();
-        SCMStringBuffer eclQuery;
-        if (!query)
-        {
-            reportError("Workunit does not contain a query", 2);
-            return false;
-        }
-        query->getQueryText(eclQuery);
+
         Owned<IStringIterator> debugValues = &workunit->getDebugValues();
         ForEach (*debugValues)
         {