-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path__init__.py
100 lines (91 loc) · 3.14 KB
/
__init__.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# encoding: utf-8
# SPDX-FileCopyrightText: Copyright © 2023 Nedko Arnaudov
# SPDX-FileCopyrightText: Copyright © 2016-2017 Karl Linden
# SPDX-License-Identifier: BSD-2-Clause
class WafToolchainFlags:
"""
Waf helper class for handling set of CFLAGS
and related. The flush() method will
prepend so to allow supplied by (downstream/distro/builder) waf caller flags
to override the upstream flags in wscript.
TODO: upstream this or find alternative easy way of doing the same
"""
def __init__(self, conf):
"""
:param conf: Waf configuration object
"""
self.conf = conf
self.flags = {}
for x in ('CPPFLAGS', 'CFLAGS', 'CXXFLAGS', 'LINKFLAGS'):
self.flags[x] = []
def flush(self):
"""
Flush flags to the configuration object
Prepend is used so to allow supplied by
(downstream/distro/builder) waf caller flags
to override the upstream flags in wscript.
"""
for key, val in self.flags.items():
self.conf.env.prepend_value(key, val)
def add(self, key, val):
"""
:param key: Set to add flags to. 'CPPFLAGS', 'CFLAGS', 'CXXFLAGS' or 'LINKFLAGS'
:param val: string or list of strings
"""
flags = self.flags[key]
if isinstance(val, list):
#flags.extend(val)
for x in val:
if not isinstance(x, str):
raise Exception("value must be string or list of strings. ", type(x))
flags.append(x)
elif isinstance(val, str):
flags.append(val)
else:
raise Exception("value must be string or list of strings")
def add_cpp(self, value):
"""
Add flag or list of flags to CPPFLAGS
:param value: string or list of strings
"""
self.add('CPPFLAGS', value)
def add_c(self, value):
"""
Add flag or list of flags to CFLAGS
:param value: string or list of strings
"""
self.add('CFLAGS', value)
def add_cxx(self, value):
"""
Add flag or list of flags to CXXFLAGS
:param value: string or list of strings
"""
self.add('CXXFLAGS', value)
def add_candcxx(self, value):
"""
Add flag or list of flags to CFLAGS and CXXFLAGS
:param value: string or list of strings
"""
self.add_c(value)
self.add_cxx(value)
def add_link(self, value):
"""
Add flag or list of flags to LINKFLAGS
:param value: string or list of strings
"""
self.add('LINKFLAGS', value)
def display(self):
"""
Print via conf.msg all non-empty flags
"""
tool_flags = [
('C compiler flags', ['CFLAGS', 'CPPFLAGS']),
('C++ compiler flags', ['CXXFLAGS', 'CPPFLAGS']),
('Linker flags', ['LINKFLAGS', 'LDFLAGS'])
]
for name, vars in tool_flags:
flags = []
for var in vars:
flags += self.conf.all_envs[''][var]
if flags:
self.conf.msg(name, repr(flags), color='NORMAL')