mirror of
https://gitlab.com/scemama/irpf90.git
synced 2024-12-22 04:13:33 +01:00
Improved parallel compilation : separated modules and subroutines
Version:1.1.57
This commit is contained in:
parent
b3474f293c
commit
7d63b88ee6
@ -105,6 +105,7 @@ end subroutine
|
|||||||
allocate(irp_stack(STACKMAX,nthread+1))
|
allocate(irp_stack(STACKMAX,nthread+1))
|
||||||
allocate(irp_cpu(STACKMAX,nthread+1))
|
allocate(irp_cpu(STACKMAX,nthread+1))
|
||||||
allocate(stack_index(nthread+1))
|
allocate(stack_index(nthread+1))
|
||||||
|
stack_index = 0
|
||||||
alloc = .True.
|
alloc = .True.
|
||||||
endif
|
endif
|
||||||
stack_index(ithread+1) = stack_index(ithread+1)+1
|
stack_index(ithread+1) = stack_index(ithread+1)+1
|
||||||
|
@ -72,19 +72,21 @@ def run():
|
|||||||
result += " %sirp_touches.irp.F90"%(irpdir)
|
result += " %sirp_touches.irp.F90"%(irpdir)
|
||||||
for m in mod:
|
for m in mod:
|
||||||
result += " %s%s.irp.F90"%(irpdir,m.name[:-4])
|
result += " %s%s.irp.F90"%(irpdir,m.name[:-4])
|
||||||
|
result += " %s%s.irp.module.F90"%(irpdir,m.name[:-4])
|
||||||
print >>file, result
|
print >>file, result
|
||||||
|
|
||||||
result = "OBJ += %sirp_stack.irp.o"%(irpdir)
|
result = "OBJ += %sirp_stack.irp.o"%(irpdir)
|
||||||
for m in mod:
|
for m in mod:
|
||||||
if not m.is_main:
|
if not m.is_main:
|
||||||
result += " %s%s.irp.o"%(irpdir,m.name[:-4])
|
result += " %s%s.irp.o"%(irpdir,m.name[:-4])
|
||||||
|
result += " %s%s.irp.module.o"%(irpdir,m.name[:-4])
|
||||||
print >>file, result
|
print >>file, result
|
||||||
|
|
||||||
print >>file, "OBJ1 = $(patsubst %%, %s%%,$(notdir $(OBJ))) %sirp_touches.irp.o"%(irpdir,irpdir)
|
print >>file, "OBJ1 = $(patsubst %%, %s%%,$(notdir $(OBJ))) %sirp_touches.irp.o"%(irpdir,irpdir)
|
||||||
|
|
||||||
all = filter(lambda x: modules[x].is_main, modules)
|
all = filter(lambda x: modules[x].is_main, modules)
|
||||||
all = map(lambda x: x[:-6], all)
|
all = map(lambda x: x[:-6], all)
|
||||||
all_o = map(lambda x: "%s.irp.o"%(x), all)
|
all_o = map(lambda x: "%s.irp.module.o %s.irp.o"%(x,x), all)
|
||||||
print >>file, "ALL = %s"%(" ".join(all))
|
print >>file, "ALL = %s"%(" ".join(all))
|
||||||
print >>file, "ALL_OBJ = %s"%(" ".join(all_o))
|
print >>file, "ALL_OBJ = %s"%(" ".join(all_o))
|
||||||
print >>file, "ALL_OBJ1 = $(patsubst %%, %s%%,$(notdir $(ALL_OBJ)))"%(irpdir)
|
print >>file, "ALL_OBJ1 = $(patsubst %%, %s%%,$(notdir $(ALL_OBJ)))"%(irpdir)
|
||||||
@ -93,20 +95,20 @@ def run():
|
|||||||
for m in mod:
|
for m in mod:
|
||||||
if m.is_main:
|
if m.is_main:
|
||||||
exe = m.name[:-4]
|
exe = m.name[:-4]
|
||||||
print >>file, "%s: %s%s.irp.o $(OBJ1)"%(exe,irpdir,exe)
|
print >>file, "%s: %s%s.irp.o %s%s.irp.module.o $(OBJ1)"%(exe,irpdir,exe,irpdir,exe)
|
||||||
print >>file, "\t$(FC) -o $@ %s$@.irp.o $(OBJ1) $(LIB)"%(irpdir)
|
print >>file, "\t$(FC) -o $@ %s$@.irp.o %s$@.irp.module.o $(OBJ1) $(LIB)"%(irpdir,irpdir)
|
||||||
print >>file, "\t@make -s move"
|
print >>file, "\t@make -s move"
|
||||||
|
|
||||||
buffer = ""
|
buffer = ""
|
||||||
for m in mod:
|
for m in mod:
|
||||||
filename = "%s%s.irp.o:"%(irpdir,m.name[:-4])
|
filename = "%s%s.irp.o: %s%s.irp.module.o"%(irpdir,m.name[:-4],irpdir,m.name[:-4])
|
||||||
mds = map (lambda x: " %s%s.irp.o"%(irpdir,x[:-4]),m.needed_modules)
|
mds = map (lambda x: " %s%s.irp.module.o"%(irpdir,x[:-4]),m.needed_modules)
|
||||||
print >>file, filename+" ".join(mds)
|
print >>file, filename+" ".join(mds)
|
||||||
if not m.is_main:
|
if not m.is_main:
|
||||||
buffer += "\t - @echo '"+filename+" ".join(mds)+"' >> %sdist_Makefile\n"%(irpdir)
|
buffer += "\t - @echo '"+filename+" ".join(mds)+"' >> %sdist_Makefile\n"%(irpdir)
|
||||||
print >>file, "%sirp_touches.irp.o:"%(irpdir),
|
print >>file, "%sirp_touches.irp.o:"%(irpdir),
|
||||||
mds = filter(lambda x: not x.is_main,mod)
|
mds = filter(lambda x: not x.is_main,mod)
|
||||||
mds = map(lambda x: " %s%s.irp.o"%(irpdir,x.name[:-4]),mds)
|
mds = map(lambda x: " %s%s.irp.o %s%s.irp.o"%(irpdir,x.name[:-4],irpdir,x.name[:-4]),mds)
|
||||||
print >>file," ".join(mds)
|
print >>file," ".join(mds)
|
||||||
|
|
||||||
|
|
||||||
@ -137,6 +139,10 @@ def run():
|
|||||||
print >>file, "\t- @cp %s$*.irp.F90 dist/$*/| DO_NOTHING="%(irpdir)
|
print >>file, "\t- @cp %s$*.irp.F90 dist/$*/| DO_NOTHING="%(irpdir)
|
||||||
print >>file, "\t- cd dist ; tar -zcvf ../$*.tar.gz $*\n"
|
print >>file, "\t- cd dist ; tar -zcvf ../$*.tar.gz $*\n"
|
||||||
|
|
||||||
|
print >>file, irpdir+"%.irp.module.o: "+irpdir+"%.irp.module.F90"
|
||||||
|
print >>file, "\t$(FC) $(FCFLAGS) -c "+irpdir+"$*.irp.module.F90 -o "+irpdir+"$*.irp.module.o"
|
||||||
|
print >>file, irpdir+"%.irp.o: "+irpdir+"%.irp.module.o "+irpdir+"%.irp.F90"
|
||||||
|
print >>file, "\t$(FC) $(FCFLAGS) -c "+irpdir+"$*.irp.F90 -o "+irpdir+"$*.irp.o"
|
||||||
print >>file, irpdir+"%.irp.o: "+irpdir+"%.irp.F90"
|
print >>file, irpdir+"%.irp.o: "+irpdir+"%.irp.F90"
|
||||||
print >>file, "\t$(FC) $(FCFLAGS) -c "+irpdir+"$*.irp.F90 -o "+irpdir+"$*.irp.o"
|
print >>file, "\t$(FC) $(FCFLAGS) -c "+irpdir+"$*.irp.F90 -o "+irpdir+"$*.irp.o"
|
||||||
print >>file, irpdir+"%.o: %.F90"
|
print >>file, irpdir+"%.o: %.F90"
|
||||||
|
@ -34,6 +34,16 @@ from util import *
|
|||||||
|
|
||||||
class Fmodule(object):
|
class Fmodule(object):
|
||||||
|
|
||||||
|
header = \
|
||||||
|
[ "! -*- F90 -*-",
|
||||||
|
"!",
|
||||||
|
"!-----------------------------------------------!",
|
||||||
|
"! This file was generated with the irpf90 tool. !",
|
||||||
|
"! !",
|
||||||
|
"! DO NOT MODIFY IT BY HAND !",
|
||||||
|
"!-----------------------------------------------!",
|
||||||
|
"" ]
|
||||||
|
|
||||||
def __init__(self,text,filename):
|
def __init__(self,text,filename):
|
||||||
self.text = put_info(text,filename)
|
self.text = put_info(text,filename)
|
||||||
self.name = "%s_mod"%(filename[:-6])
|
self.name = "%s_mod"%(filename[:-6])
|
||||||
@ -62,16 +72,10 @@ class Fmodule(object):
|
|||||||
return self._variables
|
return self._variables
|
||||||
variables = property(variables)
|
variables = property(variables)
|
||||||
|
|
||||||
|
|
||||||
def head(self):
|
def head(self):
|
||||||
if '_head' not in self.__dict__:
|
if '_head' not in self.__dict__:
|
||||||
result = [ "! -*- F90 -*-",
|
result = [ "module %s"%(self.name) ]
|
||||||
"!",
|
|
||||||
"!-----------------------------------------------!",
|
|
||||||
"! This file was generated with the irpf90 tool. !",
|
|
||||||
"! !",
|
|
||||||
"! DO NOT MODIFY IT BY HAND !",
|
|
||||||
"!-----------------------------------------------!",
|
|
||||||
"", "module %s"%(self.name) ]
|
|
||||||
result += self.use
|
result += self.use
|
||||||
result += self.dec
|
result += self.dec
|
||||||
result += flatten( map(lambda x: variables[x].header,self.variables) )
|
result += flatten( map(lambda x: variables[x].header,self.variables) )
|
||||||
@ -209,6 +213,7 @@ class Fmodule(object):
|
|||||||
needed_modules = property(needed_modules)
|
needed_modules = property(needed_modules)
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
from parsed_text import parsed_text
|
from parsed_text import parsed_text
|
||||||
for filename, text in parsed_text:
|
for filename, text in parsed_text:
|
||||||
|
@ -41,8 +41,19 @@ modules = create_modules()
|
|||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
def write_module(m):
|
def write_module(m):
|
||||||
|
# Module data
|
||||||
|
filename = irpdir+m.name[0:-4]+".irp.module.F90"
|
||||||
|
text = m.header + m.head
|
||||||
|
text = map(lambda x: "%s\n"%(x),text)
|
||||||
|
if not same_file(filename,text):
|
||||||
|
print filename
|
||||||
|
file = open(filename,"w")
|
||||||
|
file.writelines(text)
|
||||||
|
file.close()
|
||||||
|
|
||||||
|
# Subroutines
|
||||||
filename = irpdir+m.name[0:-4]+".irp.F90"
|
filename = irpdir+m.name[0:-4]+".irp.F90"
|
||||||
text = m.head + m.generated_text + m.residual_text
|
text = m.header + m.generated_text + m.residual_text
|
||||||
text = map(lambda x: "%s\n"%(x),text)
|
text = map(lambda x: "%s\n"%(x),text)
|
||||||
if not same_file(filename,text):
|
if not same_file(filename,text):
|
||||||
print filename
|
print filename
|
||||||
|
@ -1 +1 @@
|
|||||||
version = "1.1.56"
|
version = "1.1.57"
|
||||||
|
Loading…
Reference in New Issue
Block a user