From 3c44792bfb6dbd42277d8d421ea04462f5803b48 Mon Sep 17 00:00:00 2001 From: Jonathan Lambrechts <jonathan.lambrechts@uclouvain.be> Date: Wed, 28 Apr 2010 09:15:32 +0000 Subject: [PATCH] functionC : add buildLibrary member to avoid complicated compilation line in lua --- Solver/function.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/Solver/function.cpp b/Solver/function.cpp index e1bbecaf0a..e8db646bb5 100644 --- a/Solver/function.cpp +++ b/Solver/function.cpp @@ -340,8 +340,7 @@ class functionLua : public function { : function(nbCol), _luaFunctionName(luaFunctionName), _L(L) { args.resize(dependencies.size()); - for (int i = 0; i < dependencies.size(); i++) { - setArgument(args[i], dependencies[i]); + for (int i = 0; i < dependencies.size(); i++) { setArgument(args[i], dependencies[i]); } } }; @@ -365,6 +364,20 @@ class functionC : public function { std::vector<fullMatrix<double> > args; void (*callback)(void); public: + static void buildLibrary(std::string code, std::string filename) { + FILE *tmpSrc = fopen("_tmpSrc.cpp","w"); + fprintf(tmpSrc, "%s\n",code.c_str()); + fclose(tmpSrc); + FILE *tmpMake = fopen("_tmpMake","w"); + fprintf(tmpMake, "include $(DG_BUILD_DIR)/CMakeFiles/dg.dir/flags.make\n" + "%s : %s\n" + "\tg++ -shared -fPIC -o $@ $(CXX_FLAGS) $(CXX_DEFINES) $<\n", + filename.c_str(), "_tmpSrc.cpp"); + fclose(tmpMake); + system("make -f _tmpMake"); + unlink ("_tmpSrc.cpp"); + unlink ("_tmpMake.cpp"); + } void call (dataCacheMap *m, fullMatrix<double> &val) { switch (args.size()) { case 0 : @@ -472,6 +485,9 @@ void function::registerBindings(binding *b){ mb = cb->setConstructor<functionC,std::string, std::string,int,std::vector<const function*> >(); mb->setArgNames("file", "symbol", "nbCol", "arguments",NULL); mb->setDescription(" "); + mb = cb->addMethod("buildLibrary", &functionC::buildLibrary); + mb->setArgNames("code", "libraryFileName",NULL); + mb->setDescription("build a dynamic library from the given code"); cb->setParentClass<function>(); #endif -- GitLab