wscript 6.34 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')

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

45
        opt.recurse('src/benchmarks')
46

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

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

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

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

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

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

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

103
def build_extensive_tests(ctx):
104
    ctx.recurse('src/')
105
106
    ctx.recurse('src/tests')

107
108
109
def build_benchmark(ctx):
    ctx.recurse('src/benchmarks')

110
111
112
113
114
115
116
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)
117

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

126
def run_benchmark(ctx):
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
    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)
152

153
def shutdown(ctx):
154
155
    if ctx.options.qsub:
        limbo.qsub(ctx.options.qsub)
Jean-Baptiste Mouret's avatar
Jean-Baptiste Mouret committed
156
157
    if ctx.options.oar:
        limbo.oar(ctx.options.oar)
158
    if ctx.options.local:
159
160
161
        limbo.run_local(ctx.options.local, False)
    if ctx.options.local_serial:
        limbo.run_local(ctx.options.local_serial)
162

163
164
165
def insert_license(ctx):
    limbo.insert_license()

166
167
168
class BuildExtensiveTestsContext(BuildContext):
    cmd = 'build_extensive_tests'
    fun = 'build_extensive_tests'
169
170
171
172

class BuildBenchmark(BuildContext):
    cmd = 'build_benchmark'
    fun = 'build_benchmark'
173
174
175
176

class InsertLicense(BuildContext):
    cmd = 'insert_license'
    fun = 'insert_license'