wscript 6.59 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
Federico Allocati's avatar
Federico Allocati committed
16
import inspect
17
from waflib.Build import BuildContext
18

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

Vaios Papaspyros's avatar
Vaios Papaspyros committed
31
        opt.add_option('--create', type='string', help='create a new exp', dest='create_exp')
32
        limbo.add_create_options(opt)
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('--local', type='string', help='config file (json) to run local', dest='local')
37
        opt.add_option('--local_serial', type='string', help='config file (json) to run local', dest='local_serial')
38
        opt.add_option('--experimental', action='store_true', help='specify to compile the experimental examples', dest='experimental')
39
        opt.add_option('--nb_replicates', type='int', help='number of replicates performed during the benchmark', dest='nb_rep')
40
        # tests
41
        opt.add_option('--tests', action='store_true', help='compile tests or not', dest='tests')
Jean-Baptiste Mouret's avatar
Jean-Baptiste Mouret committed
42
        opt.load('xcode')
43
        for i in glob.glob('exp/*'):
Federico Allocati's avatar
Federico Allocati committed
44
45
                if os.path.isdir(i):
                    opt.recurse(i)
46

47
        opt.recurse('src/benchmarks')
48

49
def configure(conf):
50
        conf.load('compiler_cxx boost waf_unit_test')
51
52
53
        conf.load('compiler_c')
        conf.load('eigen')
        conf.load('tbb')
Jean-Baptiste Mouret's avatar
Jean-Baptiste Mouret committed
54
        conf.load('sferes')
55
        conf.load('openmp')
56
        conf.load('mkl')
Jean-Baptiste Mouret's avatar
Jean-Baptiste Mouret committed
57
        conf.load('xcode')
58
        conf.load('nlopt')
59
        conf.load('libcmaes')
60

61
62
63
        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"
64
        else:
65
            if conf.env.CXX_NAME in ["gcc", "g++"] and int(conf.env['CC_VERSION'][0]+conf.env['CC_VERSION'][1]) < 47:
66
67
68
                common_flags = "-Wall -std=c++0x"
            else:
                common_flags = "-Wall -std=c++11"
69
70
            if conf.env.CXX_NAME in ["clang", "llvm"]:
                common_flags += " -fdiagnostics-color"
71
            opt_flags = " -O3 -march=native -g"
72

73
        conf.check_boost(lib='serialization filesystem \
Jean-Baptiste Mouret's avatar
Jean-Baptiste Mouret committed
74
            system unit_test_framework program_options \
75
            graph thread', min_version='1.39')
76
77
        conf.check_eigen()
        conf.check_tbb()
78
        conf.check_sferes()
79
80
        conf.check_openmp()
        conf.check_mkl()
81
        conf.check_nlopt()
82
        conf.check_libcmaes()
Jean-Baptiste Mouret's avatar
Jean-Baptiste Mouret committed
83

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

86
87
        all_flags = common_flags + opt_flags
        conf.env['CXXFLAGS'] = conf.env['CXXFLAGS'] + all_flags.split(' ')
88
89
        print conf.env['CXXFLAGS']

Jean-Baptiste Mouret's avatar
misc    
Jean-Baptiste Mouret committed
90
91
92
93
        if conf.options.exp:
                for i in conf.options.exp.split(','):
                        print 'configuring for exp: ' + i
                        conf.recurse('exp/' + i)
94
        conf.recurse('src/benchmarks')
Jean-Baptiste Mouret's avatar
misc    
Jean-Baptiste Mouret committed
95

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

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

109
110
111
def build_benchmark(ctx):
    ctx.recurse('src/benchmarks')

112
113
114
115
116
117
118
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)
119

120
121
122
123
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)
124
            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
125
126
127
            retcode = subprocess.call(s, shell=True, env=None)
            print "oarsub returned:" + str(retcode)

128
def run_benchmark(ctx):
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
    HEADER='\033[95m'
    NC='\033[0m'
    res_dir=os.getcwd()+"/benchmark_results/"
    try:
        os.makedirs(res_dir)
    except:
        print "WARNING, dir:" + res_dir + " not be created"
    for fullname in glob.glob('build/src/benchmarks/*'):
        if os.path.isfile(fullname) and os.access(fullname, os.X_OK):
            fpath, fname = os.path.split(fullname)
            directory = res_dir + "/" + fname
            try:
                os.makedirs(directory)
            except:
                print "WARNING, dir:" + directory + " not be created, the new results will be concatenated to the old ones"
            s = "cp " + fullname + " " + directory
            retcode = subprocess.call(s, shell=True, env=None)
            if ctx.options.nb_rep:
                nb_rep = ctx.options.nb_rep
            else:
                nb_rep = 10
            for i in range(0,nb_rep):
                print HEADER+" Running: " + fname + " for the "+str(i)+"th time"+NC
                s="cd " + directory +";./" + fname
                retcode = subprocess.call(s, shell=True, env=None)
154

155
def shutdown(ctx):
Vaios Papaspyros's avatar
Vaios Papaspyros committed
156
    if ctx.options.create_exp:
157
        limbo.create_exp(ctx.options.create_exp, ctx.options)
158
159
    if ctx.options.qsub:
        limbo.qsub(ctx.options.qsub)
Jean-Baptiste Mouret's avatar
Jean-Baptiste Mouret committed
160
161
    if ctx.options.oar:
        limbo.oar(ctx.options.oar)
162
    if ctx.options.local:
163
164
165
        limbo.run_local(ctx.options.local, False)
    if ctx.options.local_serial:
        limbo.run_local(ctx.options.local_serial)
166

167
168
169
170
def build_docs(ctx):
    s = "cd docs; make html"
    retcode = subprocess.call(s, shell=True, env=None)

171
172
173
class BuildExtensiveTestsContext(BuildContext):
    cmd = 'build_extensive_tests'
    fun = 'build_extensive_tests'
174
175
176
177

class BuildBenchmark(BuildContext):
    cmd = 'build_benchmark'
    fun = 'build_benchmark'
178
179
180
181

class BuildDoc(BuildContext):
    cmd = 'docs'
    fun = 'build_docs'