wscript 5.43 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', 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')
Jean-Baptiste Mouret's avatar
Jean-Baptiste Mouret committed
38
        opt.load('xcode')
39
        for i in glob.glob('exp/*'):
Federico Allocati's avatar
Federico Allocati committed
40
41
                if os.path.isdir(i):
                    opt.recurse(i)
42

43
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
64
65
66
            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"
67
            common_flags += " -fdiagnostics-color"
68
            opt_flags = " -O3 -march=native -g"
69

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

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

83
        if conf.env['CXXFLAGS_ODE']:
84
                common_flags += ' ' + conf.env['CXXFLAGS_ODE']
85

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
103
        from waflib.Tools import waf_unit_test
        bld.add_post_fun(waf_unit_test.summary)
Jean-Baptiste Mouret's avatar
Jean-Baptiste Mouret committed
104

105

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

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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
def run_benchmark(ctx):
	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:
141
				print "WARNING, dir:" + directory + " not be created, the new results will be concatenated to the old ones"
142
143
			s = "cp " + fullname + " " + directory
			retcode = subprocess.call(s, shell=True, env=None)
144
145
146
147
148
			if ctx.options.nb_rep:
				nb_rep = ctx.options.nb_rep
			else:
				nb_rep = 10
			for i in range(0,nb_rep):
149
150
151
152
153
				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):
156
157
    if ctx.options.qsub:
        limbo.qsub(ctx.options.qsub)
Jean-Baptiste Mouret's avatar
Jean-Baptiste Mouret committed
158
159
    if ctx.options.oar:
        limbo.oar(ctx.options.oar)
160
161
162
163
164


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