[cig-commits] commit: Updating SConstruct to operate like stgUnderworldE.

Mercurial hg at geodynamics.org
Mon Nov 24 11:23:05 PST 2008


changeset:   82:64d894c49f62
user:        Luke Hodkinson <luke at vpac.org>
date:        Wed Oct 01 11:40:32 2008 +0200
files:       SConstruct
description:
Updating SConstruct to operate like stgUnderworldE.


diff -r 2ad7aaba2fd3 -r 64d894c49f62 SConstruct
--- a/SConstruct	Thu Sep 11 17:13:28 2008 +1000
+++ b/SConstruct	Wed Oct 01 11:40:32 2008 +0200
@@ -26,14 +26,23 @@ if 'config' in COMMAND_LINE_TARGETS or '
 
     proj = env.Package(SConfig.Project)
     proj.opts.AddOptions(
-        BoolOption('with_glucifer', 'Use gLucifer visualisation', 1)
+        BoolOption('with_glucifer', 'Use gLucifer visualisation', 1),
+        BoolOption('read_hdf5', 'Read from HDF5 files when restarting from checkpoint', 1),
+        BoolOption('write_hdf5', 'Write checkpoint files as HDF5', 1)
         )
     proj.dependency(SConfig.packages.cmath)
     proj.dependency(SConfig.packages.libXML2)
     proj.dependency(SConfig.packages.MPI)
-    proj.dependency(SConfig.packages.SVNRevision)
+    proj.dependency(SConfig.packages.HGRevision)
     proj.dependency(SConfig.packages.BlasLapack)
-    proj.dependency(SConfig.packages.HDF5, False, have_define='HAVE_HDF5')
+    
+    if env['read_hdf5'] and env['write_hdf5']:
+        proj.dependency(SConfig.packages.HDF5, False, have_define=['READ_HDF5','WRITE_HDF5'])
+    elif env['write_hdf5']:
+        proj.dependency(SConfig.packages.HDF5, False, have_define='WRITE_HDF5')
+    elif env['read_hdf5']:
+        proj.dependency(SConfig.packages.HDF5, False, have_define='READ_HDF5')
+    
     proj.dependency(SConfig.packages.PETSc, have_define='HAVE_PETSC')
     proj.dependency(SConfig.packages.PETScExt)
     if env['with_glucifer']:
@@ -46,6 +55,8 @@ if 'config' in COMMAND_LINE_TARGETS or '
         proj.dependency(SConfig.packages.libPNG, False, have_define='HAVE_PNG')
         proj.dependency(SConfig.packages.libJPEG, False, have_define='HAVE_JPEG')
         proj.dependency(SConfig.packages.libTIFF, False, have_define='HAVE_TIFF')
+        if platform.system() == 'Darwin':
+          proj.dependency(SConfig.packages.CoreServices)
     env.configure_packages()
 
     # Need to define the extension for shared libraries as well
@@ -53,6 +64,11 @@ if 'config' in COMMAND_LINE_TARGETS or '
     ext = env['ESCAPE']('"' + env['SHLIBSUFFIX'][1:] + '"')
     lib_dir = env['ESCAPE']('"' + os.path.abspath(env['build_dir']) + '/lib' + '"')
     env.AppendUnique(CPPDEFINES=[('MODULE_EXT', ext), ('LIB_DIR', lib_dir)])
+
+    # If we have no shared libraries, include a pre-processor definition to
+    # prevent modules from trying to load dynamically.
+    if not env['shared_libraries']:
+        env.AppendUnique(CPPDEFINES=['NOSHARED', 'SINGLE_EXE'])
 
     # Save results.
     env.save_config()
@@ -68,19 +84,58 @@ else:
     # INSERT TARGETS HERE.
     #
 
-    SConscript('StGermain/SConscript', exports='env')
+    module = SConscript('StGermain/SConscript', exports='env')
+    module_proto = module[0]
+    module_code = module[1]
     env.Prepend(LIBS='StGermain')
-    SConscript('StgDomain/SConscript', exports='env')
+    module = SConscript('StgDomain/SConscript', exports='env')
+    module_proto += module[0]
+    module_code += module[1]
     env.Prepend(LIBS='StgDomain')
-    SConscript('StgFEM/SConscript', exports='env')
+    module = SConscript('StgFEM/SConscript', exports='env')
+    module_proto += module[0]
+    module_code += module[1]
     env.Prepend(LIBS='StgFEM')
-    SConscript('PICellerator/SConscript', exports='env')
+    module = SConscript('PICellerator/SConscript', exports='env')
+    module_proto += module[0]
+    module_code += module[1]
     env.Prepend(LIBS='PICellerator')
-    SConscript('Underworld/SConscript', exports='env')
+    module = SConscript('Underworld/SConscript', exports='env')
+    module_proto += module[0]
+    module_code += module[1]
     env.Prepend(LIBS='Underworld')
-    SConscript('Magma/SConscript', exports='env')
+    module = SConscript('Magma/SConscript', exports='env')
+    module_proto += module[0]
+    module_code += module[1]
+    env.Prepend(LIBS='Magma')
     if env['with_glucifer']:
-        SConscript('gLucifer/SConscript', exports='env')
+        module += SConscript('gLucifer/SConscript', exports='env')
+        env.Prepend(LIBS='glucifer')
+        module_proto += module[0]
+        module_code += module[1]
+
+    # If we're building only with static libraries, we need to build the
+    # StGermain executable here, after we've finished building all the
+    # other static libraries.
+    if not env['shared_libraries'] and env['static_libraries']:
+        module_src = env.build_module_register(env.get_build_path('StGermain/ModuleRegister.c'), module_proto, module_code)
+        module_obj = env.SharedObject(module_src)
+        module_lib = env.Library(env.get_build_path('lib/ModuleRegister'), module_obj)
+        libs = env.get('LIBS', [])
+        ind = libs.index('StGermain')
+        libs.insert(ind + 1, module_lib)
+
+        src = 'StGermain/src/main.c'
+        obj_dst = env.get_build_path('StGermain/' + src[:-2])
+        obj = env.SharedObject(obj_dst, src)
+        prog_dst = env.get_build_path('bin/StGermain')
+        env.Program(prog_dst, obj, LIBS=libs)
+
+        src = 'StGermain/Base/FlattenXML/src/main.c'
+        obj_dst = env.get_build_path('StGermain/' + src[:-2])
+        obj = env.SharedObject(obj_dst, src)
+        prog_dst = env.get_build_path('bin/FlattenXML')
+        env.Program(prog_dst, obj, LIBS=libs)
 
     # Dump package config.
     filename = env.get_build_path('lib/pkgconfig/stgermain.pc')



More information about the CIG-COMMITS mailing list