author | Mathieu Lacage <mathieu.lacage@sophia.inria.fr> |
Tue, 03 Oct 2006 08:17:05 +0200 | |
changeset 115 | 5435512761ef |
parent 89 | 661932f116ea |
child 116 | d4ee28e845f3 |
permissions | -rw-r--r-- |
83
430203344318
add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
62
diff
changeset
|
1 |
# Copyright (c) 2006 INRIA |
430203344318
add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
62
diff
changeset
|
2 |
# All rights reserved. |
430203344318
add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
62
diff
changeset
|
3 |
# |
430203344318
add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
62
diff
changeset
|
4 |
# This program is free software; you can redistribute it and/or modify |
430203344318
add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
62
diff
changeset
|
5 |
# it under the terms of the GNU General Public License version 2 as |
430203344318
add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
62
diff
changeset
|
6 |
# published by the Free Software Foundation; |
430203344318
add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
62
diff
changeset
|
7 |
# |
430203344318
add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
62
diff
changeset
|
8 |
# This program is distributed in the hope that it will be useful, |
430203344318
add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
62
diff
changeset
|
9 |
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
430203344318
add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
62
diff
changeset
|
10 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
430203344318
add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
62
diff
changeset
|
11 |
# GNU General Public License for more details. |
430203344318
add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
62
diff
changeset
|
12 |
# |
430203344318
add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
62
diff
changeset
|
13 |
# You should have received a copy of the GNU General Public License |
430203344318
add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
62
diff
changeset
|
14 |
# along with this program; if not, write to the Free Software |
430203344318
add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
62
diff
changeset
|
15 |
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
430203344318
add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
62
diff
changeset
|
16 |
# |
430203344318
add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
62
diff
changeset
|
17 |
# Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr> |
430203344318
add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
62
diff
changeset
|
18 |
|
430203344318
add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
62
diff
changeset
|
19 |
|
430203344318
add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
62
diff
changeset
|
20 |
|
8
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
21 |
import os |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
22 |
import os.path |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
23 |
import shutil |
62
0ec2ff3a483f
split SConstruct to make it more readable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
61
diff
changeset
|
24 |
from SCons.Environment import Environment |
0ec2ff3a483f
split SConstruct to make it more readable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
61
diff
changeset
|
25 |
from SCons.Builder import Builder |
0ec2ff3a483f
split SConstruct to make it more readable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
61
diff
changeset
|
26 |
from SCons.Action import Action |
0ec2ff3a483f
split SConstruct to make it more readable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
61
diff
changeset
|
27 |
import SCons |
0ec2ff3a483f
split SConstruct to make it more readable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
61
diff
changeset
|
28 |
|
0ec2ff3a483f
split SConstruct to make it more readable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
61
diff
changeset
|
29 |
# hack stolen from wengo |
0ec2ff3a483f
split SConstruct to make it more readable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
61
diff
changeset
|
30 |
# to get an ARGUMENTS defined correctly |
0ec2ff3a483f
split SConstruct to make it more readable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
61
diff
changeset
|
31 |
try: |
0ec2ff3a483f
split SConstruct to make it more readable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
61
diff
changeset
|
32 |
ARGUMENTS = SCons.Script.ARGUMENTS |
0ec2ff3a483f
split SConstruct to make it more readable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
61
diff
changeset
|
33 |
except AttributeError: |
0ec2ff3a483f
split SConstruct to make it more readable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
61
diff
changeset
|
34 |
from SCons.Script.SConscript import Arguments |
0ec2ff3a483f
split SConstruct to make it more readable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
61
diff
changeset
|
35 |
ARGUMENTS = Arguments |
8
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
36 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
37 |
class Ns3Module: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
38 |
def __init__ (self, name, dir): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
39 |
self.sources = [] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
40 |
self.inst_headers = [] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
41 |
self.headers = [] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
42 |
self.extra_dist = [] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
43 |
self.deps = [] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
44 |
self.external_deps = [] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
45 |
self.config = [] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
46 |
self.name = name |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
47 |
self.dir = dir |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
48 |
self.executable = False |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
49 |
self.library = True |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
50 |
def set_library (self): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
51 |
self.library = True |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
52 |
self.executable = False |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
53 |
def set_executable (self): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
54 |
self.library = False |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
55 |
self.executable = True |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
56 |
def add_config (self, config_fn): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
57 |
self.config.append (config_fn) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
58 |
def add_extra_dist (self, dist): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
59 |
self.extra_dist.append (dist) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
60 |
def add_external_dep (self, dep): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
61 |
self.external_deps.append (dep) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
62 |
def add_dep (self, dep): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
63 |
self.deps.append (dep) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
64 |
def add_deps (self, deps): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
65 |
self.deps.extend (deps) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
66 |
def add_source (self, source): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
67 |
self.sources.append (source) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
68 |
def add_sources (self, sources): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
69 |
self.sources.extend (sources) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
70 |
def add_header (self, header): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
71 |
self.headers.append (header) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
72 |
def add_headers (self, headers): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
73 |
self.headers.extend (headers) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
74 |
def add_inst_header (self, header): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
75 |
self.inst_headers.append (header) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
76 |
def add_inst_headers (self, headers): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
77 |
self.inst_headers.extend (headers) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
78 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
79 |
def MyCopyAction (target, source, env): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
80 |
try: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
81 |
if len (target) == len (source): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
82 |
for i in range (len(target)): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
83 |
shutil.copy (source[i].path, target[i].path) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
84 |
return 0 |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
85 |
else: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
86 |
return 'invalid target/source match' |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
87 |
except: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
88 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
89 |
return 'exception' |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
90 |
def MyCopyActionPrint (target, source, env): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
91 |
if len (target) == len (source): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
92 |
output = '' |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
93 |
for i in range (len(target)): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
94 |
output = output + 'copy \'' + source[i].path + '\' to \'' + target[i].path + '\'' |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
95 |
if i < len (target) - 1: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
96 |
output = output + '\n' |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
97 |
return output |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
98 |
else: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
99 |
return 'error in copy' |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
100 |
def GcxxEmitter (target, source, env): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
101 |
if os.path.exists (source[0].path): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
102 |
return [target, source] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
103 |
else: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
104 |
return [[], []] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
105 |
def MyRmTree (target, source, env): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
106 |
shutil.rmtree (env['RM_DIR']) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
107 |
return 0 |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
108 |
def MyRmTreePrint (target, source, env): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
109 |
return '' |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
110 |
def print_cmd_line(s, target, src, env): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
111 |
print 'Building ' + (' and '.join([str(x) for x in target])) + '...' |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
112 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
113 |
class Ns3BuildVariant: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
114 |
def __init__ (self): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
115 |
self.static = False |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
116 |
self.gcxx_deps = False |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
117 |
self.gcxx_root = '' |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
118 |
self.build_root = '' |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
119 |
self.env = None |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
120 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
121 |
class Ns3: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
122 |
def __init__ (self): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
123 |
self.__modules = [] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
124 |
self.extra_dist = [] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
125 |
self.build_dir = 'build' |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
126 |
self.version = '0.0.1' |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
127 |
self.name = 'noname' |
56
5bc84776b357
add doc target for doxygen build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
51
diff
changeset
|
128 |
self.doxygen_config = '' |
8
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
129 |
def add (self, module): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
130 |
self.__modules.append (module) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
131 |
def add_extra_dist (self, dist): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
132 |
self.extra_dist.append (dist) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
133 |
def __get_module (self, name): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
134 |
for module in self.__modules: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
135 |
if module.name == name: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
136 |
return module |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
137 |
return None |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
138 |
def get_mod_output (self, module, variant): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
139 |
if module.executable: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
140 |
suffix = variant.env.subst (variant.env['PROGSUFFIX']) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
141 |
filename = os.path.join (variant.build_root, 'bin', |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
142 |
module.name + suffix) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
143 |
else: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
144 |
if variant.static: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
145 |
prefix = variant.env['LIBPREFIX'] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
146 |
suffix = variant.env['LIBSUFFIX'] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
147 |
else: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
148 |
prefix = variant.env['SHLIBPREFIX'] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
149 |
suffix = variant.env['SHLIBSUFFIX'] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
150 |
prefix = variant.env.subst (prefix) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
151 |
suffix = variant.env.subst (suffix) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
152 |
filename = os.path.join (variant.build_root, 'lib', |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
153 |
prefix + module.name + suffix) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
154 |
return filename |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
155 |
def get_obj_builders (self, variant, module): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
156 |
env = variant.env |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
157 |
objects = [] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
158 |
if len (module.config) > 0: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
159 |
src_config_file = os.path.join (self.build_dir, 'config', module.name + '-config.h') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
160 |
tgt_config_file = os.path.join (variant.build_root, 'include', |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
161 |
'ns3', module.name + '-config.h') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
162 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
163 |
for source in module.sources: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
164 |
obj_file = os.path.splitext (source)[0] + '.o' |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
165 |
tgt = os.path.join (variant.build_root, module.dir, obj_file) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
166 |
src = os.path.join (module.dir, source) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
167 |
if variant.static: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
168 |
obj_builder = env.StaticObject (target = tgt, source = src) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
169 |
else: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
170 |
obj_builder = env.SharedObject (target = tgt, source = src) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
171 |
if len (module.config) > 0: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
172 |
config_file = env.MyCopyBuilder (target = [tgt_config_file], |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
173 |
source = [src_config_file]) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
174 |
env.Depends (obj_builder, config_file) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
175 |
if variant.gcxx_deps: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
176 |
gcno_tgt = os.path.join (variant.build_root, module.dir, |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
177 |
os.path.splitext (source)[0] + '.gcno') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
178 |
gcda_tgt = os.path.join (variant.build_root, module.dir, |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
179 |
os.path.splitext (source)[0] + '.gcda') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
180 |
gcda_src = os.path.join (variant.gcxx_root, module.dir, |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
181 |
os.path.splitext (source)[0] + '.gcda') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
182 |
gcno_src = os.path.join (variant.gcxx_root, module.dir, |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
183 |
os.path.splitext (source)[0] + '.gcno') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
184 |
gcno_builder = env.CopyGcxxBuilder (target = gcno_tgt, source = gcno_src) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
185 |
gcda_builder = env.CopyGcxxBuilder (target = gcda_tgt, source = gcda_src) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
186 |
env.Depends (obj_builder, gcda_builder) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
187 |
env.Depends (obj_builder, gcno_builder) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
188 |
objects.append (obj_builder) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
189 |
return objects |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
190 |
def get_internal_deps (self, module, hash): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
191 |
for dep_name in module.deps: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
192 |
dep = self.__get_module (dep_name) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
193 |
hash[dep_name] = dep |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
194 |
self.get_internal_deps (dep, hash) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
195 |
def get_external_deps (self, module): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
196 |
hash = {} |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
197 |
self.get_internal_deps (module, hash) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
198 |
ext_hash = {} |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
199 |
for mod in hash.values (): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
200 |
for ext_dep in mod.external_deps: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
201 |
ext_hash[ext_dep] = 1 |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
202 |
return ext_hash.keys () |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
203 |
def get_sorted_deps (self, module): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
204 |
h = {} |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
205 |
self.get_internal_deps (module, h) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
206 |
modules = [] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
207 |
for dep in h.keys (): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
208 |
deps_copy = [] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
209 |
mod = h[dep] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
210 |
deps_copy.extend (mod.deps) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
211 |
modules.append ([mod, deps_copy]) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
212 |
sorted = [] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
213 |
while len (modules) > 0: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
214 |
to_remove = [] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
215 |
for item in modules: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
216 |
if len (item[1]) == 0: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
217 |
to_remove.append (item[0].name) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
218 |
for item in to_remove: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
219 |
for i in modules: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
220 |
if item in i[1]: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
221 |
i[1].remove (item) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
222 |
new_modules = [] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
223 |
for mod in modules: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
224 |
found = False |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
225 |
for i in to_remove: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
226 |
if i == mod[0].name: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
227 |
found = True |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
228 |
break |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
229 |
if not found: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
230 |
new_modules.append (mod) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
231 |
modules = new_modules |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
232 |
sorted.extend (to_remove) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
233 |
sorted.reverse () |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
234 |
# append external deps |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
235 |
ext_deps = self.get_external_deps (module) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
236 |
for dep in ext_deps: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
237 |
sorted.append (dep) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
238 |
return sorted |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
239 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
240 |
def gen_mod_dep (self, variant): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
241 |
build_root = variant.build_root |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
242 |
cpp_path = os.path.join (variant.build_root, 'include') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
243 |
env = variant.env |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
244 |
env.Append (CPPPATH=[cpp_path]) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
245 |
header_dir = os.path.join (build_root, 'include', 'ns3') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
246 |
lib_path = os.path.join (build_root, 'lib') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
247 |
module_builders = [] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
248 |
for module in self.__modules: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
249 |
objects = self.get_obj_builders (variant, module) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
250 |
libs = self.get_sorted_deps (module) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
251 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
252 |
filename = self.get_mod_output (module, variant) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
253 |
if module.executable: |
19
bc4690ec2cbb
use rpath only on posix platforms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
18
diff
changeset
|
254 |
if env['PLATFORM'] == 'posix': |
bc4690ec2cbb
use rpath only on posix platforms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
18
diff
changeset
|
255 |
module_builder = env.Program (target = filename, source = objects, |
bc4690ec2cbb
use rpath only on posix platforms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
18
diff
changeset
|
256 |
LIBPATH=lib_path, LIBS=libs, |
23
b301a369b843
small formatting detail
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
19
diff
changeset
|
257 |
RPATH=lib_path) |
19
bc4690ec2cbb
use rpath only on posix platforms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
18
diff
changeset
|
258 |
else: |
bc4690ec2cbb
use rpath only on posix platforms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
18
diff
changeset
|
259 |
module_builder = env.Program (target = filename, source = objects, |
bc4690ec2cbb
use rpath only on posix platforms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
18
diff
changeset
|
260 |
LIBPATH=lib_path, LIBS=libs) |
8
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
261 |
else: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
262 |
if variant.static: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
263 |
module_builder = env.StaticLibrary (target = filename, source = objects) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
264 |
else: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
265 |
module_builder = env.SharedLibrary (target = filename, source = objects, |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
266 |
LIBPATH=lib_path, LIBS=libs) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
267 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
268 |
for dep_name in module.deps: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
269 |
dep = self.__get_module (dep_name) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
270 |
env.Depends (module_builder, self.get_mod_output (dep, variant)) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
271 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
272 |
for header in module.inst_headers: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
273 |
tgt = os.path.join (header_dir, header) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
274 |
src = os.path.join (module.dir, header) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
275 |
#builder = env.Install (target = tgt, source = src) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
276 |
header_builder = env.MyCopyBuilder (target = tgt, source = src) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
277 |
env.Depends (module_builder, header_builder) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
278 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
279 |
module_builders.append (module_builder) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
280 |
return module_builders |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
281 |
def gen_mod_config (self, env): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
282 |
config_dir = os.path.join (self.build_dir, 'config') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
283 |
for module in self.__modules: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
284 |
if len (module.config) > 0: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
285 |
config_file = os.path.join (config_dir, module.name + '-config.h') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
286 |
config_file_guard = module.name + '_CONFIG_H' |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
287 |
config_file_guard.upper () |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
288 |
if not os.path.isfile (config_file): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
289 |
if not os.path.isdir (config_dir): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
290 |
os.makedirs (config_dir) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
291 |
outfile = open (config_file, 'w') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
292 |
outfile.write ('#ifndef ' + config_file_guard + '\n') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
293 |
outfile.write ('#define ' + config_file_guard + '\n') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
294 |
config = env.Configure () |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
295 |
for fn in module.config: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
296 |
output = fn (env, config) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
297 |
for o in output: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
298 |
outfile.write (o) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
299 |
outfile.write ('\n') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
300 |
outfile.write ('#endif /*' + config_file_guard + '*/\n') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
301 |
config.Finish () |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
302 |
def generate_dependencies (self): |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
303 |
env = Environment() |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
304 |
self.gen_mod_config (env) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
305 |
cc = env['CC'] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
306 |
cxx = env.subst (env['CXX']) |
115
5435512761ef
allow the user to provide project-wide compilation and link flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
89
diff
changeset
|
307 |
common_flags = ARGUMENTS.get('cflags', '').split (' ') |
5435512761ef
allow the user to provide project-wide compilation and link flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
89
diff
changeset
|
308 |
cxxflags = ARGUMENTS.get('cxxflags', '').split (' ') |
5435512761ef
allow the user to provide project-wide compilation and link flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
89
diff
changeset
|
309 |
ldflags = ARGUMENTS.get('ldflags', '').split (' ') |
8
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
310 |
if cc == 'cl' and cxx == 'cl': |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
311 |
env = Environment (tools = ['mingw']) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
312 |
cc = env['CC'] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
313 |
cxx = env.subst (env['CXX']) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
314 |
if cc == 'gcc' and cxx == 'g++': |
115
5435512761ef
allow the user to provide project-wide compilation and link flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
89
diff
changeset
|
315 |
common_flags.extend (['-g3', '-Wall', '-Werror']) |
8
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
316 |
debug_flags = [] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
317 |
opti_flags = ['-O3'] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
318 |
elif cc == 'cl' and cxx == 'cl': |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
319 |
env = Environment (ENV = os.environ) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
320 |
debug_flags = ['-W1', '-GX', '-EHsc', '-D_DEBUG', '/MDd'] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
321 |
opti_flags = ['-O2', '-EHsc', '-DNDEBUG', '/MD'] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
322 |
env.Append (CCFLAGS=common_flags, |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
323 |
CPPDEFINES=['RUN_SELF_TESTS'], |
115
5435512761ef
allow the user to provide project-wide compilation and link flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
89
diff
changeset
|
324 |
TARFLAGS='-c -z', |
5435512761ef
allow the user to provide project-wide compilation and link flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
89
diff
changeset
|
325 |
CPPFLAGS=cxxflags, |
5435512761ef
allow the user to provide project-wide compilation and link flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
89
diff
changeset
|
326 |
LINKFLAGS=ldflags) |
8
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
327 |
verbose = ARGUMENTS.get('verbose', 'n') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
328 |
if verbose == 'n': |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
329 |
env['PRINT_CMD_LINE_FUNC'] = print_cmd_line |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
330 |
header_builder = Builder (action = Action (MyCopyAction, strfunction = MyCopyActionPrint)) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
331 |
env.Append (BUILDERS = {'MyCopyBuilder':header_builder}) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
332 |
gcxx_builder = Builder (action = Action (MyCopyAction, strfunction = MyCopyActionPrint), |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
333 |
emitter = GcxxEmitter) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
334 |
env.Append (BUILDERS = {'CopyGcxxBuilder':gcxx_builder}) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
335 |
variant = Ns3BuildVariant () |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
336 |
builders = [] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
337 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
338 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
339 |
gcov_env = env.Copy () |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
340 |
gcov_env.Append (CFLAGS=['-fprofile-arcs', '-ftest-coverage'], |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
341 |
CXXFLAGS=['-fprofile-arcs', '-ftest-coverage'], |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
342 |
LINKFLAGS=['-fprofile-arcs']) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
343 |
# code coverage analysis |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
344 |
variant.static = False |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
345 |
variant.env = gcov_env |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
346 |
variant.build_root = os.path.join (self.build_dir, 'gcov') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
347 |
builders = self.gen_mod_dep (variant) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
348 |
for builder in builders: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
349 |
gcov_env.Alias ('gcov', builder) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
350 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
351 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
352 |
opt_env = env.Copy () |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
353 |
opt_env.Append (CFLAGS=opti_flags, |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
354 |
CXXFLAGS=opti_flags, |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
355 |
CPPDEFINES=['NDEBUG']) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
356 |
# optimized static support |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
357 |
variant.static = True |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
358 |
variant.env = opt_env |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
359 |
variant.build_root = os.path.join (self.build_dir, 'opt-static') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
360 |
builders = self.gen_mod_dep (variant) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
361 |
for builder in builders: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
362 |
opt_env.Alias ('opt-static', builder) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
363 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
364 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
365 |
opt_env = env.Copy () |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
366 |
opt_env.Append (CFLAGS=opti_flags, |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
367 |
CXXFLAGS=opti_flags, |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
368 |
CPPDEFINES=['NDEBUG']) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
369 |
# optimized shared support |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
370 |
variant.static = False |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
371 |
variant.env = opt_env |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
372 |
variant.build_root = os.path.join (self.build_dir, 'opt-shared') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
373 |
builders = self.gen_mod_dep (variant) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
374 |
for builder in builders: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
375 |
opt_env.Alias ('opt-shared', builder) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
376 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
377 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
378 |
arc_env = env.Copy () |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
379 |
arc_env.Append (CFLAGS=opti_flags, |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
380 |
CXXFLAGS=opti_flags, |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
381 |
CPPDEFINES=['NDEBUG']) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
382 |
arc_env.Append (CFLAGS=['-frandom-seed=0','-fprofile-generate'], |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
383 |
CXXFLAGS=['-frandom-seed=0','-fprofile-generate'], |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
384 |
LINKFLAGS=['-frandom-seed=0', '-fprofile-generate']) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
385 |
# arc profiling |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
386 |
variant.static = False |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
387 |
variant.env = arc_env |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
388 |
variant.build_root = os.path.join (self.build_dir, 'opt-arc') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
389 |
builders = self.gen_mod_dep (variant) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
390 |
for builder in builders: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
391 |
arc_env.Alias ('opt-arc', builder) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
392 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
393 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
394 |
arcrebuild_env = env.Copy () |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
395 |
arcrebuild_env.Append (CFLAGS=opti_flags, |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
396 |
CXXFLAGS=opti_flags, |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
397 |
CPPDEFINES=['NDEBUG']) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
398 |
arcrebuild_env.Append (CFLAGS=['-frandom-seed=0', '-fprofile-use'], |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
399 |
CXXFLAGS=['-frandom-seed=0', '-fprofile-use'], |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
400 |
LINKFLAGS=['-frandom-seed=0','-fprofile-use']) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
401 |
# arc rebuild |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
402 |
variant.static = False |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
403 |
variant.env = arcrebuild_env |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
404 |
variant.gcxx_deps = True |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
405 |
variant.gcxx_root = os.path.join (self.build_dir, 'opt-arc') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
406 |
variant.build_root = os.path.join (self.build_dir, 'opt-arc-rebuild') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
407 |
builders = self.gen_mod_dep (variant) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
408 |
for builder in builders: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
409 |
arcrebuild_env.Alias ('opt-arc-rebuild', builder) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
410 |
variant.gcxx_deps = False |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
411 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
412 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
413 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
414 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
415 |
dbg_env = env.Copy () |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
416 |
env.Append (CFLAGS=debug_flags, |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
417 |
CXXFLAGS=debug_flags,) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
418 |
# debug static support |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
419 |
variant.static = True |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
420 |
variant.env = dbg_env |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
421 |
variant.build_root = os.path.join (self.build_dir, 'dbg-static') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
422 |
builders = self.gen_mod_dep (variant) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
423 |
for builder in builders: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
424 |
dbg_env.Alias ('dbg-static', builder) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
425 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
426 |
dbg_env = env.Copy () |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
427 |
env.Append (CFLAGS=debug_flags, |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
428 |
CXXFLAGS=debug_flags,) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
429 |
# debug shared support |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
430 |
variant.static = False |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
431 |
variant.env = dbg_env |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
432 |
variant.build_root = os.path.join (self.build_dir, 'dbg-shared') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
433 |
builders = self.gen_mod_dep (variant) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
434 |
for builder in builders: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
435 |
dbg_env.Alias ('dbg-shared', builder) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
436 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
437 |
env.Alias ('dbg', 'dbg-shared') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
438 |
env.Alias ('opt', 'opt-shared') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
439 |
env.Default ('dbg') |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
440 |
env.Alias ('all', ['dbg-shared', 'dbg-static', 'opt-shared', 'opt-static']) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
441 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
442 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
443 |
# dist support |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
444 |
dist_env = env.Copy () |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
445 |
if dist_env['PLATFORM'] == 'posix': |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
446 |
dist_list = [] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
447 |
for module in self.__modules: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
448 |
for f in module.sources: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
449 |
dist_list.append (os.path.join (module.dir, f)) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
450 |
for f in module.headers: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
451 |
dist_list.append (os.path.join (module.dir, f)) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
452 |
for f in module.inst_headers: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
453 |
dist_list.append (os.path.join (module.dir, f)) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
454 |
for f in module.extra_dist: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
455 |
dist_list.append (os.path.join (module.dir, f)) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
456 |
for f in self.extra_dist: |
56
5bc84776b357
add doc target for doxygen build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
51
diff
changeset
|
457 |
dist_list.append (f) |
8
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
458 |
dist_list.append ('SConstruct') |
89
661932f116ea
fix distcheck
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
83
diff
changeset
|
459 |
dist_list.append ('build.py') |
8
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
460 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
461 |
targets = [] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
462 |
basename = self.name + '-' + self.version |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
463 |
for src in dist_list: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
464 |
tgt = os.path.join (basename, src) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
465 |
targets.append (dist_env.MyCopyBuilder (target = tgt, source = src)) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
466 |
tar = basename + '.tar.gz' |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
467 |
zip = basename + '.zip' |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
468 |
tmp_tar = os.path.join (self.build_dir, tar) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
469 |
tmp_zip = os.path.join (self.build_dir, zip) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
470 |
dist_tgt = [tar, zip] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
471 |
dist_src = [tmp_tar, tmp_zip] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
472 |
dist_env.Tar (tmp_tar, targets) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
473 |
dist_env.Zip (tmp_zip, targets) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
474 |
dist_builder = dist_env.MyCopyBuilder (target = dist_tgt, source = dist_src) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
475 |
dist_env.Alias ('dist', dist_builder) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
476 |
dist_env.Append (RM_DIR=basename) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
477 |
dist_env.AddPostAction (dist_builder, dist_env.Action (MyRmTree, |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
478 |
strfunction = MyRmTreePrint)) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
479 |
dist_builder = dist_env.MyCopyBuilder (target = dist_tgt, source = dist_src) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
480 |
dist_env.Alias ('fastdist', dist_tgt) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
481 |
|
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
482 |
# distcheck |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
483 |
distcheck_list = [] |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
484 |
for src in dist_list: |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
485 |
tgt = os.path.join (self.build_dir, basename, src) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
486 |
distcheck_list.append (tgt) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
487 |
untar = env.Command (distcheck_list, tar, |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
488 |
['cd ' + self.build_dir + ' && tar -zxf ../' + tar]) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
489 |
scons_dir = os.path.join (self.build_dir, basename) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
490 |
distcheck_builder = env.Command ('x',distcheck_list, |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
491 |
['cd ' + scons_dir + ' && scons']) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
492 |
env.AlwaysBuild (distcheck_builder) |
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
493 |
env.Alias ('distcheck', distcheck_builder) |
56
5bc84776b357
add doc target for doxygen build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
51
diff
changeset
|
494 |
if self.doxygen_config != '': |
5bc84776b357
add doc target for doxygen build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
51
diff
changeset
|
495 |
doxy = env.Command ('doc/html/*', self.doxygen_config, |
5bc84776b357
add doc target for doxygen build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
51
diff
changeset
|
496 |
['doxygen ' + self.doxygen_config]) |
5bc84776b357
add doc target for doxygen build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
51
diff
changeset
|
497 |
env.AlwaysBuild (doxy) |
5bc84776b357
add doc target for doxygen build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
51
diff
changeset
|
498 |
env.Alias ('doc', doxy) |
8
cb4ae01ba180
add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
499 |