wscript 4.79 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('--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
40
        # tests
        opt.add_option('--tests', action='store_true', help='compile tests or not', dest='tests')
Jean-Baptiste Mouret's avatar
Jean-Baptiste Mouret committed
41
        opt.load('xcode')
42
        for i in glob.glob('exp/*'):
Federico Allocati's avatar
Federico Allocati committed
43
44
                if os.path.isdir(i):
                    opt.recurse(i)
45

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
92
        if conf.options.exp:
                for i in conf.options.exp.split(','):
                        print 'configuring for exp: ' + i
                        conf.recurse('exp/' + i)

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

102

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

107
108
109
110
111
112
113
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)
114

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


124
def shutdown(ctx):
125
126
    if ctx.options.qsub:
        limbo.qsub(ctx.options.qsub)
Jean-Baptiste Mouret's avatar
Jean-Baptiste Mouret committed
127
128
    if ctx.options.oar:
        limbo.oar(ctx.options.oar)
129
    if ctx.options.local:
130
131
132
        limbo.run_local(ctx.options.local, False)
    if ctx.options.local_serial:
        limbo.run_local(ctx.options.local_serial)
133
134
135
136
137


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