@@ -49,17 +49,28 @@ def _is_cc_source(p):
49
49
return False
50
50
51
51
def _cpp_source_collector_aspect_impl (target , ctx ):
52
- sources = []
52
+ direct_sources = []
53
53
if hasattr (ctx .rule .attr , "srcs" ):
54
54
for src in ctx .rule .files .srcs :
55
55
if _is_cc_source (src .path ):
56
- sources .append (src )
56
+ direct_sources .append (src )
57
57
58
- return [CppSourceCollectorInfo (sources = sources )]
58
+ transitive_sources = []
59
+ if hasattr (ctx .rule .attr , "deps" ):
60
+ for dep in ctx .rule .attr .deps :
61
+ if CppSourceCollectorInfo in dep :
62
+ transitive_sources .append (dep [CppSourceCollectorInfo ].sources )
63
+
64
+ return [
65
+ CppSourceCollectorInfo (
66
+ sources = depset (direct_sources , transitive = transitive_sources ),
67
+ ),
68
+ ]
59
69
60
70
_cpp_source_collector_aspect = aspect (
61
71
implementation = _cpp_source_collector_aspect_impl ,
62
72
attr_aspects = ["deps" ],
73
+ provides = [CppSourceCollectorInfo ],
63
74
)
64
75
65
76
def _strip_external (p ):
@@ -98,6 +109,7 @@ def _ecsact_build_recipe(ctx):
98
109
99
110
sources = []
100
111
recipe_data = []
112
+ defines_map = {}
101
113
102
114
source_paths = []
103
115
@@ -132,7 +144,7 @@ def _ecsact_build_recipe(ctx):
132
144
cc_dep_compilation_contexts .append (cc_info .compilation_context )
133
145
134
146
source_info = cc_dep [CppSourceCollectorInfo ]
135
- for src in source_info .sources :
147
+ for src in source_info .sources . to_list () :
136
148
source_paths .append ({
137
149
"path" : src .path ,
138
150
"outdir" : _source_outdir (src ),
@@ -142,6 +154,14 @@ def _ecsact_build_recipe(ctx):
142
154
143
155
if len (cc_dep_compilation_contexts ) > 0 :
144
156
cc_dep_compilation_context = cc_common .merge_compilation_contexts (compilation_contexts = cc_dep_compilation_contexts )
157
+ defines = cc_dep_compilation_context .defines .to_list () + cc_dep_compilation_context .local_defines .to_list ()
158
+
159
+ for d in defines :
160
+ pair = d .split ("=" , 1 )
161
+ key = pair [0 ]
162
+ value = pair [1 ] if len (pair ) > 1 else ""
163
+
164
+ defines_map [key ] = value
145
165
146
166
for hdr in cc_dep_compilation_context .headers .to_list ():
147
167
hdr_prefix = ""
@@ -181,6 +201,7 @@ def _ecsact_build_recipe(ctx):
181
201
182
202
recipe = {
183
203
"name" : ctx .attr .name ,
204
+ "defines" : defines_map ,
184
205
"sources" : sources ,
185
206
"imports" : ctx .attr .imports ,
186
207
"system_libs" : ctx .attr .system_libs ,
@@ -205,6 +226,7 @@ ecsact_build_recipe = rule(
205
226
"srcs" : attr .label_list (
206
227
allow_files = True ,
207
228
),
229
+ "defines" : attr .string_dict (),
208
230
"cc_deps" : attr .label_list (
209
231
providers = [CcInfo ],
210
232
aspects = [_cpp_source_collector_aspect ],
0 commit comments