summaryrefslogtreecommitdiff
path: root/PyGan/src
diff options
context:
space:
mode:
Diffstat (limited to 'PyGan/src')
-rw-r--r--PyGan/src/Makefile41
-rw-r--r--PyGan/src/setup_cle2000.py56
-rw-r--r--PyGan/src/setup_lcm.py19
3 files changed, 74 insertions, 42 deletions
diff --git a/PyGan/src/Makefile b/PyGan/src/Makefile
index f48c98a..8520eef 100644
--- a/PyGan/src/Makefile
+++ b/PyGan/src/Makefile
@@ -16,6 +16,9 @@ PYTHONPATH = $(pylib)/python
$(info set PYTHONPATH="$(PYTHONPATH)")
export PYTHONPATH
+# Build defaults and phony targets
+.DEFAULT_GOAL := all
+
ifeq ($(intel),1)
ifeq ($(INTELTOOLS),)
$(error INTELTOOLS is not set)
@@ -50,11 +53,11 @@ else
endif
endif
export COMPILER
+# export FORTRANPATH
-all:
- $(MAKE) donjon
+all: donjon
checkPython: ; @which python3 > /dev/null
-ganlib: clean sub-make-ganlib pygan-ganlib
+ganlib: sub-make-ganlib pygan-ganlib
ifeq ($(openmp),1)
@echo 'pygan_ganlib: openmp is defined'
endif
@@ -70,7 +73,7 @@ endif
ifeq ($(hdf5),1)
@echo 'pygan_ganlib: hdf5 is defined'
endif
-trivac: clean sub-make-trivac pygan-trivac
+trivac: sub-make-trivac pygan-trivac
ifeq ($(openmp),1)
@echo 'pygan_trivac: openmp is defined'
endif
@@ -86,7 +89,7 @@ endif
ifeq ($(hdf5),1)
@echo 'pygan_trivac: hdf5 is defined'
endif
-dragon: clean sub-make-dragon pygan-dragon
+dragon: sub-make-dragon pygan-dragon
ifeq ($(openmp),1)
@echo 'pygan_dragon: openmp is defined'
endif
@@ -102,7 +105,7 @@ endif
ifeq ($(hdf5),1)
@echo 'pygan_dragon: hdf5 is defined'
endif
-donjon: clean sub-make-donjon pygan-donjon
+donjon: sub-make-donjon pygan-donjon
ifeq ($(openmp),1)
@echo 'pygan_donjon: openmp is defined'
endif
@@ -119,14 +122,14 @@ ifeq ($(hdf5),1)
@echo 'pygan_donjon: hdf5 is defined'
endif
sub-make-ganlib:
- $(MAKE) openmp=$(openmp) hdf5=$(hdf5) -C ../../Ganlib/src
+ $(MAKE) openmp=$(openmp) intel=$(intel) nvidia=$(nvidia) llvm=$(llvm) hdf5=$(hdf5) -C ../../Ganlib/src
sub-make-trivac: sub-make-ganlib
- $(MAKE) openmp=$(openmp) -C ../../Utilib/src
- $(MAKE) openmp=$(openmp) hdf5=$(hdf5) -C ../../Trivac/src
+ $(MAKE) openmp=$(openmp) intel=$(intel) nvidia=$(nvidia) llvm=$(llvm) -C ../../Utilib/src
+ $(MAKE) openmp=$(openmp) intel=$(intel) nvidia=$(nvidia) llvm=$(llvm) hdf5=$(hdf5) -C ../../Trivac/src
sub-make-dragon: sub-make-trivac
- $(MAKE) openmp=$(openmp) hdf5=$(hdf5) -C ../../Dragon/src
+ $(MAKE) openmp=$(openmp) intel=$(intel) nvidia=$(nvidia) llvm=$(llvm) hdf5=$(hdf5) -C ../../Dragon/src
sub-make-donjon: sub-make-dragon
- $(MAKE) openmp=$(openmp) hdf5=$(hdf5) -C ../../Donjon/src
+ $(MAKE) openmp=$(openmp) intel=$(intel) nvidia=$(nvidia) llvm=$(llvm) hdf5=$(hdf5) -C ../../Donjon/src
libGanlib.a: $(lib)/ sub-make-ganlib
cp $(libGan)/libGanlib.a .
ar -d libGanlib.a xabort_c.o
@@ -144,8 +147,8 @@ ifeq ($(openmp),1)
else
export CODE_EMBEDDED=GANLIB; cd $(DIRNAME); python3 setup_cle2000.py install --home=.
endif
- mv $(DIRNAME)/$(pylib)/* $(lib)/
- /bin/rm -r $(DIRNAME)
+ cp -R $(DIRNAME)/$(pylib)/* $(lib)/
+ /bin/rm -rf $(DIRNAME)
pygan-trivac: libGanlib.a sub-make-trivac checkPython
mkdir -p $(DIRNAME)
cp *.[ch] $(DIRNAME)
@@ -157,8 +160,8 @@ ifeq ($(openmp),1)
else
export CODE_EMBEDDED=TRIVAC; cd $(DIRNAME); python3 setup_cle2000.py install --home=.
endif
- mv $(DIRNAME)/$(pylib)/* $(lib)/
- /bin/rm -r $(DIRNAME)
+ cp -R $(DIRNAME)/$(pylib)/* $(lib)/
+ /bin/rm -rf $(DIRNAME)
pygan-dragon: libGanlib.a sub-make-dragon checkPython
mkdir -p $(DIRNAME)
cp *.[ch] $(DIRNAME)
@@ -170,8 +173,8 @@ ifeq ($(openmp),1)
else
export CODE_EMBEDDED=DRAGON; cd $(DIRNAME); python3 setup_cle2000.py install --home=.
endif
- mv $(DIRNAME)/$(pylib)/* $(lib)/
- /bin/rm -r $(DIRNAME)
+ cp -R $(DIRNAME)/$(pylib)/* $(lib)/
+ /bin/rm -rf $(DIRNAME)
pygan-donjon: libGanlib.a sub-make-donjon checkPython
mkdir -p $(DIRNAME)
cp *.[ch] $(DIRNAME)
@@ -183,8 +186,8 @@ ifeq ($(openmp),1)
else
export CODE_EMBEDDED=DONJON; cd $(DIRNAME); python3 setup_cle2000.py install --home=.
endif
- mv $(DIRNAME)/$(pylib)/* $(lib)/
- /bin/rm -r $(DIRNAME)
+ cp -R $(DIRNAME)/$(pylib)/* $(lib)/
+ /bin/rm -rf $(DIRNAME)
@echo 'makefile PYTHONPATH=' $(PYTHONPATH)
clean:
@echo 'clean PyGan'
diff --git a/PyGan/src/setup_cle2000.py b/PyGan/src/setup_cle2000.py
index d416245..c712b26 100644
--- a/PyGan/src/setup_cle2000.py
+++ b/PyGan/src/setup_cle2000.py
@@ -10,14 +10,26 @@ else:
from distutils.core import setup, Extension
import sysconfig
+def _detect_gfortran_dir():
+ import subprocess, os
+ try:
+ out = subprocess.check_output(['gfortran', '-print-file-name=libgfortran.dylib'], text=True).strip()
+ if out and out != 'libgfortran.dylib':
+ d = os.path.dirname(out)
+ if os.path.isdir(d):
+ return d
+ except Exception:
+ pass
+ return None
+
def main():
import os
from sysconfig import get_config_var
mach = os.path.basename(os.getcwd())
Code = os.environ.get("CODE_EMBEDDED", None) # Code selection
Compiler = os.environ.get("COMPILER", None) # Compiler selection
- FortranLib = os.environ.get(Compiler, None) # directory with libfortran.a
- HDF5Lib = os.environ.get("HDF5_API", None) # directory with libhdf5.a
+ FortranLib = _detect_gfortran_dir() # directory with libfortran
+ HDF5Lib = os.environ.get("HDF5_API", None) # directory with libhdf5
pylib = os.path.basename(get_config_var("LIBDIR")) # get lib or lib64
print("install Cle2000 binding to", Code, "on directory",mach, "pylib=",pylib, "Compiler=",Compiler)
if Compiler == "NVTOOLS":
@@ -49,6 +61,14 @@ def main():
libDon="../../../Donjon/lib/"+mach
extralink=["-lgfortran", ]
print("debug Compiler=",Compiler,"libdir=",libdir,"Code=",Code)
+ if FortranLib:
+ print("debug FortranLib=", FortranLib)
+ if HDF5Lib:
+ print("debug HDF5Lib=", HDF5Lib)
+
+ # Build helper lists with None filtered out
+ def _dirs(*args):
+ return [d for d in args if d]
if Code == "GANLIB":
setup (name="Cle2000",
@@ -60,8 +80,8 @@ def main():
ext_modules=[Extension('cle2000',sources=['cle2000module.c'],
extra_link_args = extralink,
include_dirs=["../../../Ganlib/src"],
- library_dirs=[libdir,FortranLib,HDF5Lib],
- runtime_library_dirs=[FortranLib,HDF5Lib],
+ library_dirs=_dirs(libdir,FortranLib,HDF5Lib),
+ runtime_library_dirs=_dirs(FortranLib,HDF5Lib),
libraries=["Ganlib","hdf5"] ) ])
elif Code == "TRIVAC":
setup (name="Cle2000",
@@ -74,8 +94,8 @@ def main():
define_macros=[('__trivac__', None)],
extra_link_args = extralink,
include_dirs=["../../../Ganlib/src"],
- library_dirs=[libdir,FortranLib,HDF5Lib,libUtl,libTri],
- runtime_library_dirs=[FortranLib,HDF5Lib],
+ library_dirs=_dirs(libdir,FortranLib,HDF5Lib,libUtl,libTri),
+ runtime_library_dirs=_dirs(FortranLib,HDF5Lib),
libraries=["Trivac","Utilib","Ganlib","hdf5"] ) ])
elif Code == "DRAGON":
setup (name="Cle2000",
@@ -88,8 +108,8 @@ def main():
define_macros=[('__dragon__', None)],
extra_link_args = extralink,
include_dirs=["../../../Ganlib/src"],
- library_dirs=[libdir,FortranLib,HDF5Lib,libUtl,libTri,libDra],
- runtime_library_dirs=[FortranLib,HDF5Lib],
+ library_dirs=_dirs(libdir,FortranLib,HDF5Lib,libUtl,libTri,libDra),
+ runtime_library_dirs=_dirs(FortranLib,HDF5Lib),
libraries=["Dragon","Trivac","Utilib","Ganlib","hdf5"] ) ])
elif Code == "DONJON":
setup (name="Cle2000",
@@ -102,8 +122,8 @@ def main():
define_macros=[('__donjon__', None)],
extra_link_args = extralink,
include_dirs=["../../../Ganlib/src"],
- library_dirs=[libdir,FortranLib,HDF5Lib,libUtl,libTri,libDra,libDon],
- runtime_library_dirs=[FortranLib,HDF5Lib],
+ library_dirs=_dirs(libdir,FortranLib,HDF5Lib,libUtl,libTri,libDra,libDon),
+ runtime_library_dirs=_dirs(FortranLib,HDF5Lib),
libraries=["Donjon","Dragon","Trivac","Utilib","Ganlib","hdf5"] ) ])
elif Code == "GANLIB_OMP":
setup (name="Cle2000",
@@ -115,8 +135,8 @@ def main():
ext_modules=[Extension('cle2000',sources=['cle2000module.c'],
extra_link_args = ["-lgomp"]+extralink,
include_dirs=["../../../Ganlib/src"],
- library_dirs=[libdir,FortranLib,HDF5Lib],
- runtime_library_dirs=[FortranLib,HDF5Lib],
+ library_dirs=_dirs(libdir,FortranLib,HDF5Lib),
+ runtime_library_dirs=_dirs(FortranLib,HDF5Lib),
libraries=["Ganlib","hdf5"] ) ])
elif Code == "TRIVAC_OMP":
setup (name="Cle2000",
@@ -129,8 +149,8 @@ def main():
define_macros=[('__trivac__', None)],
extra_link_args = ["-lgomp"]+extralink,
include_dirs=["../../../Ganlib/src"],
- library_dirs=[libdir,FortranLib,HDF5Lib,libUtl,libTri],
- runtime_library_dirs=[FortranLib,HDF5Lib],
+ library_dirs=_dirs(libdir,FortranLib,HDF5Lib,libUtl,libTri),
+ runtime_library_dirs=_dirs(FortranLib,HDF5Lib),
libraries=["Trivac","Utilib","Ganlib","hdf5"] ) ])
elif Code == "DRAGON_OMP":
setup (name="Cle2000",
@@ -143,8 +163,8 @@ def main():
define_macros=[('__dragon__', None)],
extra_link_args = ["-lgomp"]+extralink,
include_dirs=["../../../Ganlib/src"],
- library_dirs=[libdir,FortranLib,HDF5Lib,libUtl,libTri,libDra],
- runtime_library_dirs=[FortranLib,HDF5Lib],
+ library_dirs=_dirs(libdir,FortranLib,HDF5Lib,libUtl,libTri,libDra),
+ runtime_library_dirs=_dirs(FortranLib,HDF5Lib),
libraries=["Dragon","Trivac","Utilib","Ganlib","hdf5"] ) ])
elif Code == "DONJON_OMP":
setup (name="Cle2000",
@@ -157,8 +177,8 @@ def main():
define_macros=[('__donjon__', None)],
extra_link_args = ["-lgomp"]+extralink,
include_dirs=["../../../Ganlib/src"],
- library_dirs=[libdir,FortranLib,HDF5Lib,libUtl,libTri,libDra,libDon],
- runtime_library_dirs=[FortranLib,HDF5Lib],
+ library_dirs=_dirs(libdir,FortranLib,HDF5Lib,libUtl,libTri,libDra,libDon),
+ runtime_library_dirs=_dirs(FortranLib,HDF5Lib),
libraries=["Donjon","Dragon","Trivac","Utilib","Ganlib","hdf5"] ) ])
else:
raise ValueError(Code+" is not implemented for setup.py bindings")
diff --git a/PyGan/src/setup_lcm.py b/PyGan/src/setup_lcm.py
index 79e7891..76829b4 100644
--- a/PyGan/src/setup_lcm.py
+++ b/PyGan/src/setup_lcm.py
@@ -22,16 +22,25 @@ def main():
extralink=["-lnvc","-lnvcpumath"]
elif Compiler == "LLVMTOOLS":
libdir="../../lib/"+mach+"_llvm"
- libNv=" "
+ libNv=None
extralink=[ ]
elif Compiler == "INTELTOOLS":
libdir="../../lib/"+mach+"_intel"
- libNv=" "
+ libNv=None
extralink=[ ]
else:
libdir="../../lib/"+mach
- libNv=" "
+ libNv=None
extralink=[ ]
+ # Filter out missing/empty library dirs to avoid "-L " warnings
+ def _dirs(*paths):
+ out=[]
+ for p in paths:
+ if p and isinstance(p, str) and os.path.isdir(p):
+ out.append(p)
+ return out
+ lib_dirs = _dirs(libdir, libNv)
+ rpath_dirs = _dirs(libNv)
setup(name="Lcm",
version="5.0",
description="Python interface for the lcm C library API",
@@ -41,8 +50,8 @@ def main():
ext_modules=[Extension("lcm", ["lcmmodule.c"],
extra_link_args = extralink,
include_dirs=["../../../Ganlib/src",incdir],
- library_dirs=[libdir,libNv],
- runtime_library_dirs=[libNv],
+ library_dirs=lib_dirs,
+ runtime_library_dirs=rpath_dirs,
libraries=["Ganlib"] ) ])
if __name__ == "__main__":