def build_worker(self): path = os.path.abspath(self.get_path_to_results()) codefile = os.path.join(path,"code.o") interfacefile = os.path.join(path,"interface.o") headerfile = os.path.join(path,"worker_code.h") self.sofile = os.path.join(path,"interface.so") self.interfacec_o_file = os.path.join(path,"interfacec.o") self.exefile = os.path.join(path,"c_worker") compile_tools.fortran_compile(codefile, test_fortran_implementation.codestring, extra_args=["-fPIC"]) uc = create_c.GenerateACHeaderStringFromASpecificationClass() uc.specification_class = test_fortran_implementation.ForTestingInterface uc.needs_mpi = False header = uc.result with open(headerfile, "w") as f: f.write(header) root, ext = os.path.splitext(interfacefile) sourcename = root + '.pyx' cname = root + '.c' uc = create_cython.GenerateACythonSourcecodeStringFromASpecificationClass() uc.specification_class = test_fortran_implementation.ForTestingInterface uc.function_name_prefix = "ci_" uc.needs_mpi = True code = uc.result with open(sourcename, "w") as f: f.write(code) uc = create_cython.GenerateACythonStartScriptStringFromASpecificationClass() uc.specification_class = test_fortran_implementation.ForTestingInterface uc.needs_mpi = True script = uc.result with open(self.exefile, "w") as f: f.write(script) os.chmod(self.exefile, 0777) import mpi4py process, stdout, stderr = compile_tools.open_subprocess([config.compilers.cython, '-I', mpi4py.get_include(), sourcename, '-o', cname]) if process.returncode == 0: compile_tools.wait_for_file(cname) if process.returncode != 0 or not os.path.exists(cname): print "Could not cythonize {0}, error = {1}".format(sourcename, stderr) raise Exception("Could not cythonize {0}, error = {1}".format(sourcename, stderr)) with open(cname, "r") as f: string = f.read() uc = create_cython.GenerateAFortranInterfaceSourcecodeStringFromASpecificationClass() uc.specification_class = test_fortran_implementation.ForTestingInterface uc.function_name_prefix = "ci_" uc.needs_mpi = False code = uc.result compile_tools.fortran_compile(self.interfacec_o_file, code, extra_args=["-fPIC"]) compile_tools.c_pythondev_compile(interfacefile, string) compile_tools.fortran_pythondev_buildso(self.sofile, [interfacefile, codefile, self.interfacec_o_file] )
def build_worker(self): path = os.path.abspath(self.get_path_to_results()) codefile = os.path.join(path, "code.o") interfacefile = os.path.join(path, "interface.o") headerfile = os.path.join(path, "worker_code.h") self.sofile = os.path.join(path, "interface.so") self.exefile = os.path.join(path, "c_worker") self.c_compile(codefile, test_c_implementation.codestring) uc = create_c.GenerateACHeaderStringFromASpecificationClass() uc.specification_class = test_c_implementation.ForTestingInterface uc.needs_mpi = False header = uc.result with open(headerfile, "w") as f: f.write(header) root, ext = os.path.splitext(interfacefile) sourcename = root + '.pyx' cname = root + '.c' uc = create_cython.GenerateACythonSourcecodeStringFromASpecificationClass( ) uc.specification_class = test_c_implementation.ForTestingInterface uc.needs_mpi = True code = uc.result with open(sourcename, "w") as f: f.write(code) uc = create_cython.GenerateACythonStartScriptStringFromASpecificationClass( ) uc.specification_class = test_c_implementation.ForTestingInterface uc.needs_mpi = True script = uc.result with open(self.exefile, "w") as f: f.write(script) os.chmod(self.exefile, 0777) process = subprocess.Popen( # [config.compilers.cython, '--embed', sourcename, '-o', cname], [config.compilers.cython, sourcename, '-o', cname], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = process.communicate() if process.returncode == 0: self.wait_for_file(cname) if process.returncode != 0 or not os.path.exists(cname): print "Could not cythonize {0}, error = {1}".format( sourcename, stderr) raise Exception("Could not cythonize {0}, error = {1}".format( sourcename, stderr)) with open(cname, "r") as f: string = f.read() self.c_pythondev_compile(interfacefile, string) # self.c_pythondev_build(self.exefile, [interfacefile, codefile] ) self.c_pythondev_buildso(self.sofile, [interfacefile, codefile])