diff options
Diffstat (limited to 'PyGan/src')
| -rw-r--r-- | PyGan/src/Makefile | 41 | ||||
| -rw-r--r-- | PyGan/src/setup_cle2000.py | 56 | ||||
| -rw-r--r-- | PyGan/src/setup_lcm.py | 19 |
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__": |
