steering-wheel/TouchGFX/Middlewares/ST/touchgfx/framework/tools/videoconvert/bintoelf.rb

50 lines
2.0 KiB
Ruby
Raw Normal View History

2023-03-06 21:21:00 +01:00
#!env ruby
# Copyright (c) 2018(-2023) STMicroelectronics.
# All rights reserved.
#
# This file is part of the TouchGFX 4.21.2 distribution.
#
# This software is licensed under terms that can be found in the LICENSE file in
# the root directory of this software component.
# If no LICENSE file comes with this software, it is provided AS-IS.
#
###############################################################################/
require 'fileutils'
###### SETUP ###############
input = ARGV[0]
output = ARGV[1]
bins = Dir[input + "/bin/*.bin"]
FileUtils.mkdir_p("#{output}/obj") #Create obj folder
symbol_file_name = "#{output}/obj/rename_symbols.txt"
###############################################
############### Process files ########################
bins.each do |bin|
bin_file_name = File.basename(bin)
puts "Generating elf32 object from binary file #{input}/bin/#{bin_file_name}..."
`arm-none-eabi-objcopy.exe -B arm --rename-section .data=ExtFlashSection,contents,alloc,load,readonly,data -I binary -O elf32-littlearm #{input}/bin/#{bin_file_name} #{output}/obj/#{bin_file_name}.o`
#Rename the symbols
output_folder_name_subst = "#{output+'/bin'}".gsub('.', '_').gsub('/', '_')
bin_file_name_subst = File.basename(bin).gsub('.', '_').gsub('/', '_')
str = output_folder_name_subst + "_" + bin_file_name_subst
content =
"_binary_#{str}_start video_#{bin_file_name_subst}_start\n" +
"_binary_#{str}_end video_#{bin_file_name_subst}_end\n" +
"_binary_#{str}_size video_#{bin_file_name_subst}_size\n"
puts "Renaming symbols..."
FileUtils.mkdir_p(File.dirname(symbol_file_name))
unless File.exist?(symbol_file_name) && content == File.open(symbol_file_name, 'r') { |f| f.read() }
File.open(symbol_file_name, 'w') { |f| f.write(content) }
end
# Bulk rename using objcopy --redefine-syms
`arm-none-eabi-objcopy.exe --redefine-syms #{output}/obj/rename_symbols.txt #{output}/obj/#{bin_file_name}.o`
end
#Remove temp file
FileUtils.rm(symbol_file_name)