@@ -154,6 +154,46 @@ impl Build {
154154 // Defined in Lua >= 5.3
155155 config. define ( "LUA_USE_WINDOWS" , None ) ;
156156 }
157+ _ if target. contains ( "xtensa-esp32" ) => {
158+ config
159+ . define ( "LUA_32BITS" , None ) // Use 32-bit integers and size_t
160+ . define ( "LUA_C89_NUMBERS" , None ) // Use C89 for better compatibility
161+ . flag ( "-fexceptions" )
162+ . flag ( "-Os" ) // Optimize for size
163+ . flag ( "-mlongcalls" ) // Use long calls to avoid call8 range issues
164+ . flag ( "-ffunction-sections" ) // Place each function in its own section
165+ . flag ( "-fdata-sections" ) ; // Place each data item in its own section
166+ let new_dir = out_dir. join ( "esp_source" ) ;
167+ if new_dir. exists ( ) {
168+ fs:: remove_dir_all ( & new_dir)
169+ . context ( || format ! ( "Cannot remove '{}'" , new_dir. display( ) ) ) ?;
170+ }
171+ fs:: create_dir_all ( & new_dir)
172+ . context ( || format ! ( "Cannot create '{}'" , new_dir. display( ) ) ) ?;
173+ for file in fs:: read_dir ( manifest_dir. join ( version. source_dir ( ) ) ) . context ( || {
174+ format ! (
175+ "Cannot read '{}'" ,
176+ manifest_dir. join( version. source_dir( ) ) . display( )
177+ )
178+ } ) ? {
179+ let file = file?;
180+ let src_file = manifest_dir
181+ . join ( version. source_dir ( ) )
182+ . join ( file. file_name ( ) ) ;
183+ let dst_file = new_dir. join ( file. file_name ( ) ) ;
184+ let content = fs:: read ( & src_file)
185+ . context ( || format ! ( "Cannot read '{}'" , src_file. display( ) ) ) ?
186+ // jumps
187+ . iter ( )
188+ . map ( |& b| b as char )
189+ . collect :: < String > ( )
190+ . replace ( "_setjmp" , "setjmp" )
191+ . replace ( "_longjmp" , "longjmp" ) ;
192+ fs:: write ( & dst_file, content)
193+ . context ( || format ! ( "Cannot write to '{}'" , dst_file. display( ) ) ) ?;
194+ }
195+ source_dir = new_dir
196+ }
157197 _ if target. ends_with ( "emscripten" ) => {
158198 config
159199 . define ( "LUA_USE_POSIX" , None )
0 commit comments