@@ -20,7 +20,7 @@ with associated requirements and tests.
2020"""
2121
2222load ("@lobster//:lobster.bzl" , "subrule_lobster_gtest" , "subrule_lobster_html_report" , "subrule_lobster_report" )
23- load ("//bazel/rules/rules_score:providers.bzl" , "CertifiedScope" , "ComponentInfo" , "ComponentRequirementsInfo" , "SphinxSourcesInfo" , "UnitInfo" )
23+ load ("//bazel/rules/rules_score:providers.bzl" , "CertifiedScope" , "ComponentInfo" , "ComponentRequirementsInfo" , "FeatureRequirementsInfo" , " SphinxSourcesInfo" , "UnitInfo" )
2424load ("//bazel/rules/rules_score/private:lobster_config.bzl" , "format_lobster_sources" )
2525
2626# ============================================================================
@@ -59,13 +59,18 @@ def _component_impl(ctx):
5959
6060 # -------------------------------------------------------------------------
6161 # Lobster Tracing: collect .lobster files from component_requirements targets
62+ # and feature_requirements targets (needed to resolve derived_from references)
6263 # -------------------------------------------------------------------------
6364 req_lobster_files = []
65+ feat_req_lobster_files = []
6466 for req_target in ctx .attr .requirements :
6567 if ComponentRequirementsInfo in req_target :
6668 req_lobster_files .append (req_target [ComponentRequirementsInfo ].srcs )
69+ if FeatureRequirementsInfo in req_target :
70+ feat_req_lobster_files .append (req_target [FeatureRequirementsInfo ].srcs )
6771
6872 req_lobster_depset = depset (transitive = req_lobster_files )
73+ feat_req_lobster_depset = depset (transitive = feat_req_lobster_files )
6974
7075 # Collect nested components
7176 components_depset = depset (ctx .attr .components )
@@ -132,7 +137,8 @@ def _component_impl(ctx):
132137 # only the source file lists (the structure is fixed per variant).
133138 # -------------------------------------------------------------------------
134139 comp_req_lobster_files = req_lobster_depset .to_list ()
135- all_lobster_inputs = list (comp_req_lobster_files )
140+ feat_req_lobster_files_list = feat_req_lobster_depset .to_list ()
141+ all_lobster_inputs = list (comp_req_lobster_files ) + feat_req_lobster_files_list
136142
137143 if arch_lobster_file :
138144 all_lobster_inputs .append (arch_lobster_file )
@@ -144,6 +150,7 @@ def _component_impl(ctx):
144150 template = ctx .file ._lobster_comp_template ,
145151 output = lobster_config ,
146152 substitutions = {
153+ "{FEAT_REQ_SOURCES}" : format_lobster_sources (feat_req_lobster_files_list ),
147154 "{COMP_REQ_SOURCES}" : format_lobster_sources (comp_req_lobster_files ),
148155 "{ARCH_SOURCES}" : format_lobster_sources ([arch_lobster_file ] if arch_lobster_file else []),
149156 "{UNIT_TEST_SOURCES}" : format_lobster_sources ([gtest_lobster_file ]),
@@ -211,8 +218,8 @@ _component_test = rule(
211218 attrs = {
212219 "requirements" : attr .label_list (
213220 mandatory = True ,
214- providers = [ComponentRequirementsInfo ],
215- doc = "Component requirements artifacts (component_requirements targets only )" ,
221+ providers = [[ ComponentRequirementsInfo ], [ FeatureRequirementsInfo ] ],
222+ doc = "Component requirements artifacts (component_requirements or feature_requirements targets )" ,
216223 ),
217224 "components" : attr .label_list (
218225 providers = [[ComponentInfo ], [UnitInfo ]],
0 commit comments