wscript 4.42 KB
Newer Older
1
2
#!/usr/bin/env python
# encoding: utf-8
3
4
import sys
sys.path.insert(0, './waf_tools')
5

6
7
VERSION = '0.0.1'
APPNAME = 'limbo'
8
9
10
11

srcdir = '.'
blddir = 'build'

12
import glob
13
14
import os
import subprocess
15
import limbo
16
from waflib.Build import BuildContext
17

Federico Allocati's avatar
Federico Allocati committed
18
19
import inspect

20

21
22
23
24
25
def options(opt):
        opt.load('compiler_cxx boost waf_unit_test')
        opt.load('compiler_c')
        opt.load('eigen')
        opt.load('tbb')
26
        opt.load('mkl')
Jean-Baptiste Mouret's avatar
Jean-Baptiste Mouret committed
27
        opt.load('sferes')
28
        opt.load('limbo')
29
        opt.load('openmp')
30
        opt.load('nlopt')
31
32
        opt.load('libcmaes')

33
        opt.add_option('--exp', type='string', help='exp(s) to build, separate by comma', dest='exp')
Jean-Baptiste Mouret's avatar
Jean-Baptiste Mouret committed
34
35
        opt.add_option('--qsub', type='string', help='config file (json) to submit to torque', dest='qsub')
        opt.add_option('--oar', type='string', help='config file (json) to submit to oar', dest='oar')
36
        opt.add_option('--experimental', type='string', help='experimental should be compiled? (yes/no)', dest='experimental')
Jean-Baptiste Mouret's avatar
Jean-Baptiste Mouret committed
37
        opt.load('xcode')
38
        for i in glob.glob('exp/*'):
Federico Allocati's avatar
Federico Allocati committed
39
40
                if os.path.isdir(i):
                    opt.recurse(i)
41

42

43
def configure(conf):
44
        conf.load('compiler_cxx boost waf_unit_test')
45
46
47
        conf.load('compiler_c')
        conf.load('eigen')
        conf.load('tbb')
Jean-Baptiste Mouret's avatar
Jean-Baptiste Mouret committed
48
        conf.load('sferes')
49
        conf.load('openmp')
50
        conf.load('mkl')
Jean-Baptiste Mouret's avatar
Jean-Baptiste Mouret committed
51
        conf.load('xcode')
52
        conf.load('nlopt')
53
        conf.load('libcmaes')
54

55
56
57
        if conf.env.CXX_NAME in ["icc", "icpc"]:
            common_flags = "-Wall -std=c++11"
            opt_flags = " -O3 -xHost  -march=native -mtune=native -unroll -fma -g"
58
        else:
59
60
61
62
63
            if int(conf.env['CC_VERSION'][0]+conf.env['CC_VERSION'][1]) < 47:
                common_flags = "-Wall -std=c++0x"
            else:
                common_flags = "-Wall -std=c++11"
            opt_flags = " -O3 -march=native -g"
64

65
        conf.check_boost(lib='serialization filesystem \
Jean-Baptiste Mouret's avatar
Jean-Baptiste Mouret committed
66
            system unit_test_framework program_options \
67
            graph thread', min_version='1.39')
68
69
        conf.check_eigen()
        conf.check_tbb()
70
        conf.check_sferes()
71
72
        conf.check_openmp()
        conf.check_mkl()
73
        conf.check_nlopt()
74
        conf.check_libcmaes()
Jean-Baptiste Mouret's avatar
Jean-Baptiste Mouret committed
75

Federico Allocati's avatar
Federico Allocati committed
76
77
        conf.env.INCLUDES_LIMBO = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) + "/src"

78
        if conf.env['CXXFLAGS_ODE']:
79
                common_flags += ' ' + conf.env['CXXFLAGS_ODE']
80

81
82
        all_flags = common_flags + opt_flags
        conf.env['CXXFLAGS'] = conf.env['CXXFLAGS'] + all_flags.split(' ')
83
        conf.env['CXXFLAGS'] += ['-fdiagnostics-color']
84
85
        print conf.env['CXXFLAGS']

Jean-Baptiste Mouret's avatar
misc    
Jean-Baptiste Mouret committed
86
87
88
89
90
        if conf.options.exp:
                for i in conf.options.exp.split(','):
                        print 'configuring for exp: ' + i
                        conf.recurse('exp/' + i)

91
92
93
        if conf.options.experimental and conf.options.experimental == "yes":
            conf.env['BUILD_EXPERIMENTAL'] = True

Jean-Baptiste Mouret's avatar
misc    
Jean-Baptiste Mouret committed
94

95
def build(bld):
96
97
98
99
100
    bld.recurse('src/')
    if bld.options.exp:
        for i in bld.options.exp.split(','):
            print 'Building exp: ' + i
            bld.recurse('exp/' + i)
101
102
        from waflib.Tools import waf_unit_test
        bld.add_post_fun(waf_unit_test.summary)
Jean-Baptiste Mouret's avatar
Jean-Baptiste Mouret committed
103

104

105
def build_extensive_tests(ctx):
106
    ctx.recurse('src/')
107
108
    ctx.recurse('src/tests')

109
110
111
112
113
114
115
def run_extensive_tests(ctx):
    for fullname in glob.glob('build/src/tests/combinations/*'):
        if os.path.isfile(fullname) and os.access(fullname, os.X_OK):
            fpath, fname = os.path.split(fullname)
            print "Running: " + fname
            s = "cd " + fpath + "; ./" + fname
            retcode = subprocess.call(s, shell=True, env=None)
116

117
118
119
120
def submit_extensive_tests(ctx):
    for fullname in glob.glob('build/src/tests/combinations/*'):
        if os.path.isfile(fullname) and os.access(fullname, os.X_OK):
            fpath, fname = os.path.split(fullname)
121
            s = "cd " + fpath + ";oarsub -l /nodes=1/core=2,walltime=00:15:00 -n " + fname + " -O " + fname + ".stdout.%jobid%.log -E " + fname + ".stderr.%jobid%.log ./" + fname
122
123
124
125
            retcode = subprocess.call(s, shell=True, env=None)
            print "oarsub returned:" + str(retcode)


126
def shutdown(ctx):
127
128
    if ctx.options.qsub:
        limbo.qsub(ctx.options.qsub)
Jean-Baptiste Mouret's avatar
Jean-Baptiste Mouret committed
129
130
    if ctx.options.oar:
        limbo.oar(ctx.options.oar)
131
132
133
134
135


class BuildExtensiveTestsContext(BuildContext):
    cmd = 'build_extensive_tests'
    fun = 'build_extensive_tests'