@@ -72,35 +72,35 @@ def parse_args():
72
72
73
73
sys .path .insert (0 , os .path .join (ZEPHYR_BASE , "scripts/dts" ))
74
74
75
- def c_handle_comment (dev ):
75
+ def c_handle_comment (dev , handles ):
76
76
def dev_path_str (dev ):
77
77
return dev .edt_node and dev .edt_node .path or dev .sym .name
78
78
lines = [
79
79
'' ,
80
80
'/* {:d} : {:s}:' .format (dev .handle , (dev_path_str (dev ))),
81
81
]
82
- if len (dev . devs_depends_on ) > 0 :
82
+ if len (handles [ "depends" ] ) > 0 :
83
83
lines .append (' * Direct Dependencies:' )
84
- for dep in dev . devs_depends_on :
84
+ for dep in handles [ "depends" ] :
85
85
lines .append (' * - {:s}' .format (dev_path_str (dep )))
86
- if len (dev . devs_depends_on_injected ) > 0 :
86
+ if len (handles [ "injected" ] ) > 0 :
87
87
lines .append (' * Injected Dependencies:' )
88
- for dep in dev . devs_depends_on_injected :
88
+ for dep in handles [ "injected" ] :
89
89
lines .append (' * - {:s}' .format (dev_path_str (dep )))
90
- if len (dev . devs_supports ) > 0 :
90
+ if len (handles [ "supports" ] ) > 0 :
91
91
lines .append (' * Supported:' )
92
- for sup in dev . devs_supports :
92
+ for sup in handles [ "supports" ] :
93
93
lines .append (' * - {:s}' .format (dev_path_str (sup )))
94
94
lines .append (' */' )
95
95
return lines
96
96
97
- def c_handle_array (dev , extra_support_handles = 0 ):
97
+ def c_handle_array (dev , handles , extra_support_handles = 0 ):
98
98
handles = [
99
- * [str (d .handle ) for d in dev . devs_depends_on ],
99
+ * [str (d .handle ) for d in handles [ "depends" ] ],
100
100
'DEVICE_HANDLE_SEP' ,
101
- * [str (d .handle ) for d in dev . devs_depends_on_injected ],
101
+ * [str (d .handle ) for d in handles [ "injected" ] ],
102
102
'DEVICE_HANDLE_SEP' ,
103
- * [str (d .handle ) for d in dev . devs_supports ],
103
+ * [str (d .handle ) for d in handles [ "supports" ] ],
104
104
* (extra_support_handles * ['DEVICE_HANDLE_NULL' ]),
105
105
'DEVICE_HANDLE_ENDS' ,
106
106
]
@@ -131,9 +131,18 @@ def main():
131
131
fp .write ('#include <zephyr/device.h>\n ' )
132
132
fp .write ('#include <zephyr/toolchain.h>\n ' )
133
133
for dev in parsed_elf .devices :
134
+ # The device handle are collected up in a set, which has no
135
+ # specified order. Sort each sub-category of device handle types
136
+ # separately, so that the generated C array is reproducible across
137
+ # builds.
138
+ sorted_handles = {
139
+ "depends" : sorted (dev .devs_depends_on , key = lambda d : d .handle ),
140
+ "injected" : sorted (dev .devs_depends_on_injected , key = lambda d : d .handle ),
141
+ "supports" : sorted (dev .devs_supports , key = lambda d : d .handle ),
142
+ }
134
143
extra_sups = args .num_dynamic_devices if dev .pm and dev .pm .is_power_domain else 0
135
- lines = c_handle_comment (dev )
136
- lines .extend (c_handle_array (dev , extra_sups ))
144
+ lines = c_handle_comment (dev , sorted_handles )
145
+ lines .extend (c_handle_array (dev , sorted_handles , extra_sups ))
137
146
lines .extend (['' ])
138
147
fp .write ('\n ' .join (lines ))
139
148
0 commit comments