@@ -109,7 +109,7 @@ def parse_noarch_inc_exc(self):
109109 del KCFGData .x86_down [key ]
110110 KCFGData .noarch_down [key ] = val
111111
112- def insert_arm64_section (self , raw_lines : list , arm_data : OrderedDict , is_exclusion = False , section = MLNX_ARM_KFG_SECTION ) -> list :
112+ def insert_arm64_section (self , raw_lines : list , arm_data : OrderedDict , section = MLNX_ARM_KFG_SECTION ) -> list :
113113 # For arm64, config is not added under markers, but it is added under the section [mellanox-arm64]
114114 # This design decision is taken because of the possibility that there might be conflicting options
115115 # present between two different arm64 platforms
@@ -121,10 +121,7 @@ def insert_arm64_section(self, raw_lines: list, arm_data: OrderedDict, is_exclus
121121 if not configParser .has_section (MLNX_ARM_KFG_SECTION ):
122122 configParser .add_section (MLNX_ARM_KFG_SECTION )
123123 for (key , val ) in arm_data .items ():
124- if not is_exclusion :
125- configParser .set (MLNX_ARM_KFG_SECTION , key , val )
126- else :
127- configParser .set (MLNX_ARM_KFG_SECTION , key )
124+ configParser .set (MLNX_ARM_KFG_SECTION , key , val )
128125 str_io = io .StringIO ()
129126 configParser .write (str_io , space_around_delimiters = False )
130127 return str_io .getvalue ().splitlines (True )
@@ -134,67 +131,96 @@ def insert_arm64_section(self, raw_lines: list, arm_data: OrderedDict, is_exclus
134131 return raw_lines
135132
136133
137- def get_kconfig_inc (self ) -> list :
138- kcfg_inc_raw = FileHandler .read_raw (os .path .join (self .args .build_root , SLK_KCONFIG ))
134+ def get_upstream_kconfig (self ) -> list :
139135 # Insert common config
140- noarch_start , noarch_end = FileHandler .find_marker_indices (kcfg_inc_raw , MLNX_NOARCH_MARKER )
141- kcfg_inc_raw = FileHandler .insert_kcfg_data (kcfg_inc_raw , noarch_start , noarch_end , KCFGData .noarch_incl )
136+ common_config = FileHandler .read_raw (os .path .join (self .args .build_root , SLK_KCONFIG ))
137+ noarch_start , noarch_end = FileHandler .find_marker_indices (common_config , MLNX_NOARCH_MARKER )
138+ noarch_final = OrderedDict (list (KCFGData .noarch_incl .items ()) + [(k , "n" ) for k in KCFGData .noarch_excl .keys ()])
139+ common_config = FileHandler .insert_kcfg_data (common_config , noarch_start , noarch_end , noarch_final )
142140 # Insert x86 config
143- x86_start , x86_end = FileHandler .find_marker_indices (kcfg_inc_raw , MLNX_KFG_MARKER )
144- kcfg_inc_raw = FileHandler .insert_kcfg_data (kcfg_inc_raw , x86_start , x86_end , KCFGData .x86_incl )
141+ amd64_config = FileHandler .read_raw (os .path .join (self .args .build_root , SLK_KCONFIG_AMD64 ))
142+ x86_start , x86_end = FileHandler .find_marker_indices (amd64_config , MLNX_KFG_MARKER )
143+ x86_final = OrderedDict (list (KCFGData .x86_incl .items ()) + [(k , "n" ) for k in KCFGData .x86_excl .keys ()])
144+ amd64_config = FileHandler .insert_kcfg_data (amd64_config , x86_start , x86_end , x86_final )
145145 # Insert arm config
146- kcfg_inc_raw = self .insert_arm64_section (kcfg_inc_raw , KCFGData .arm_incl )
147- print ("\n -> INFO: kconfig-inclusion file is generated \n {}" .format ("" .join (kcfg_inc_raw )))
148- return kcfg_inc_raw
146+ arm64_config = FileHandler .read_raw (os .path .join (self .args .build_root , SLK_KCONFIG_ARM64 ))
147+ arm_final = OrderedDict (list (KCFGData .arm_incl .items ()) + [(k , "n" ) for k in KCFGData .arm_excl .keys ()])
148+ arm64_config = self .insert_arm64_section (arm64_config , arm_final )
149+ print ("\n -> INFO: kconfig-inclusion file is generated \n {}" .format ("" .join (arm64_config )))
150+ return common_config , amd64_config , arm64_config
149151
150-
151- def get_downstream_kconfig_inc (self , new_kcfg_upstream ) -> list :
152- kcfg_final = copy .deepcopy (new_kcfg_upstream )
152+ def get_downstream_kconfig_diff (self , common_config_upstream , amd64_config_upstream , arm64_config_upstream ) -> list :
153153 # insert common Kconfig
154- noarch_start , noarch_end = FileHandler .find_marker_indices (kcfg_final , MLNX_NOARCH_MARKER )
155- noarch_final = OrderedDict (list (KCFGData .noarch_incl .items ()) + list (KCFGData .noarch_down .items ()))
156- kcfg_final = FileHandler .insert_kcfg_data (kcfg_final , noarch_start , noarch_end , noarch_final )
154+ common_kcfg_final = copy .deepcopy (common_config_upstream )
155+ noarch_start , noarch_end = FileHandler .find_marker_indices (common_kcfg_final , MLNX_NOARCH_MARKER )
156+ noarch_final = OrderedDict (
157+ list (KCFGData .noarch_incl .items ()) +
158+ [(k , "n" ) for k in KCFGData .noarch_excl .keys ()] +
159+ list (KCFGData .noarch_down .items ())
160+ )
161+ common_kcfg_final = FileHandler .insert_kcfg_data (common_kcfg_final , noarch_start , noarch_end , noarch_final )
162+
157163 # insert x86 Kconfig
158- x86_start , x86_end = FileHandler .find_marker_indices (kcfg_final , MLNX_KFG_MARKER )
159- x86_final = OrderedDict (list (KCFGData .x86_incl .items ()) + list (KCFGData .x86_down .items ()))
160- kcfg_final = FileHandler .insert_kcfg_data (kcfg_final , x86_start , x86_end , x86_final )
164+ amd64_kcfg_final = copy .deepcopy (amd64_config_upstream )
165+ x86_start , x86_end = FileHandler .find_marker_indices (amd64_kcfg_final , MLNX_KFG_MARKER )
166+ x86_final = OrderedDict (
167+ list (KCFGData .x86_incl .items ()) +
168+ [(k , "n" ) for k in KCFGData .x86_excl .keys ()] +
169+ list (KCFGData .x86_down .items ())
170+ )
171+ amd64_kcfg_final = FileHandler .insert_kcfg_data (amd64_kcfg_final , x86_start , x86_end , x86_final )
172+
161173 # insert arm Kconfig
162- arm_final = OrderedDict (list (KCFGData .arm_incl .items ()) + list (KCFGData .arm_down .items ()))
163- kcfg_final = self .insert_arm64_section (kcfg_final , arm_final )
164- # generate diff
165- diff = difflib .unified_diff (new_kcfg_upstream , kcfg_final , fromfile = 'a/patch/kconfig-inclusions' , tofile = "b/patch/kconfig-inclusions" , lineterm = "\n " )
166- lines = []
167- for line in diff :
168- lines .append (line )
169- print ("\n -> INFO: kconfig-inclusion.patch file is generated \n {}" .format ("" .join (lines )))
170- return lines
171-
172-
173- def get_kconfig_excl (self ) -> list :
174- # noarch_excl
175- kcfg_excl_raw = FileHandler .read_raw (os .path .join (self .args .build_root , SLK_KCONFIG_EXCLUDE ))
176- # insert common Kconfig
177- noarch_start , noarch_end = FileHandler .find_marker_indices (kcfg_excl_raw , MLNX_NOARCH_MARKER )
178- kcfg_excl_raw = FileHandler .insert_kcfg_excl_data (kcfg_excl_raw , noarch_start , noarch_end , KCFGData .noarch_excl )
179- # insert x86 Kconfig
180- x86_start , x86_end = FileHandler .find_marker_indices (kcfg_excl_raw , MLNX_KFG_MARKER )
181- kcfg_excl_raw = FileHandler .insert_kcfg_excl_data (kcfg_excl_raw , x86_start , x86_end , KCFGData .x86_excl )
182- # insert arm Kconfig
183- kcfg_excl_raw = self .insert_arm64_section (kcfg_excl_raw , KCFGData .arm_excl , True )
184- print ("\n -> INFO: kconfig-exclusion file is generated \n {}" .format ("" .join (kcfg_excl_raw )))
185- return kcfg_excl_raw
174+ arm64_kcfg_final = copy .deepcopy (arm64_config_upstream )
175+ arm_final = OrderedDict (
176+ list (KCFGData .arm_incl .items ()) +
177+ [(k , "n" ) for k in KCFGData .arm_excl .keys ()] +
178+ list (KCFGData .arm_down .items ())
179+ )
180+ arm64_kcfg_final = self .insert_arm64_section (arm64_kcfg_final , arm_final )
181+
182+ all_lines = []
183+
184+ # Generate diff for common config
185+ common_diff = difflib .unified_diff (common_config_upstream , common_kcfg_final ,
186+ fromfile = 'a/config.local/featureset-sonic/config' ,
187+ tofile = "b/config.local/featureset-sonic/config" ,
188+ lineterm = "\n " )
189+
190+ for line in common_diff :
191+ all_lines .append (line )
192+
193+ # Generate diff for amd64 config
194+ amd64_diff = difflib .unified_diff (amd64_config_upstream , amd64_kcfg_final ,
195+ fromfile = 'a/config.local/amd64/config.sonic' ,
196+ tofile = "b/config.local/amd64/config.sonic" ,
197+ lineterm = "\n " )
198+
199+ for line in amd64_diff :
200+ all_lines .append (line )
201+
202+ # Generate diff for arm64 config
203+ arm64_diff = difflib .unified_diff (arm64_config_upstream , arm64_kcfg_final ,
204+ fromfile = 'a/config.local/arm64/config.sonic-mellanox' ,
205+ tofile = "b/config.local/arm64/config.sonic-mellanox" ,
206+ lineterm = "\n " )
207+
208+ for line in arm64_diff :
209+ all_lines .append (line )
210+
211+ print ("\n -> INFO: kconfig-inclusion.patch file is generated \n {}" .format ("" .join (all_lines )))
212+ return all_lines
186213
187214
188215 def perform (self ):
189216 self .read_data ()
190217 KCFGData .x86_incl , KCFGData .x86_excl = self .parse_inc_exc (KCFGData .x86_base , KCFGData .x86_updated )
191218 KCFGData .arm_incl , KCFGData .arm_excl = self .parse_inc_exc (KCFGData .arm_base , KCFGData .arm_updated )
192219 self .parse_noarch_inc_exc ()
193- # Get the updated kconfig-inclusions
194- kcfg_inc_upstream = self .get_kconfig_inc ()
195- FileHandler .write_lines (os .path .join (self .args .build_root , SLK_KCONFIG ), kcfg_inc_upstream , True )
196- # Get the updated kconfig-exclusions
197- kcfg_excl_upstream = self .get_kconfig_excl ()
198- FileHandler .write_lines (os .path .join (self .args .build_root , SLK_KCONFIG_EXCLUDE ), kcfg_excl_upstream , True )
199- # return the kconfig-inclusions diff
200- return self .get_downstream_kconfig_inc (kcfg_inc_upstream )
220+ # Get the updated common, amd64, arm64 configs for each file
221+ common_config , amd64_config , arm64_config = self .get_upstream_kconfig ()
222+ FileHandler .write_lines (os .path .join (self .args .build_root , SLK_KCONFIG ), common_config , True )
223+ FileHandler .write_lines (os .path .join (self .args .build_root , SLK_KCONFIG_AMD64 ), amd64_config , True )
224+ FileHandler .write_lines (os .path .join (self .args .build_root , SLK_KCONFIG_ARM64 ), arm64_config , True )
225+ # return the downstream kconfig diff
226+ return self .get_downstream_kconfig_diff (common_config , amd64_config , arm64_config )
0 commit comments