[PATCH 01/10] build: Generate build hash
Sebastian Huber
sebastian.huber at embedded-brains.de
Thu Feb 25 08:42:05 UTC 2021
On 25/02/2021 05:13, Chris Johns wrote:
> On 25/2/21 12:57 am, Sebastian Huber wrote:
>> Update #4265.
>> ---
>> wscript | 27 ++++++++++++++++++++++++++-
>> 1 file changed, 26 insertions(+), 1 deletion(-)
>>
>> diff --git a/wscript b/wscript
>> index 6626fafb74..83c7c446bb 100755
>> --- a/wscript
>> +++ b/wscript
>> @@ -1359,6 +1359,30 @@ def get_compiler(conf, cp, variant):
>> return value
>>
>>
>> +def _generate_build_hash(conf):
>> + import hashlib
>> + import base64
>> +
>> + build_hash = ""
>> + for key in sorted(conf.env):
>> + build_hash = build_hash + key + str(conf.env[key])
> I am pleased to see the environment is being addressed but on some modern
> operating systems the environment has become a bit of a beast. This means
> comparable values will be near impossible if the whole environment is included
> in the build hash.
>
> Should we look to use a list that is contained? A list that effects the code on
> the target? In a purest sense a hash created from the CU pieces in all target
> libraries would be ideal however this is recursive.
This is a good idea. Maybe we should iterate over all start files and
libraries generated by the build and then create a hash of all
executable sections. Then we recompile one object with a command line
define with the build hash and replace this object in librtemscpu.a.
>
> Any chance of a build label set in the config.ini? :)
You want something like a rtems_get_build_label() which returns the
value of RTEMS_BUILD_LABEL set in a config.ini (or a default, e.g.
"arch/bsp")?
>
>> + for discard in [
>> + conf.env.PREFIX,
>> + conf.bldnode.make_node(conf.env.VARIANT).abspath(),
>> + conf.path.abspath(),
>> + ]:
>> + build_hash = build_hash.replace(discard, "")
> I do not follow this piece of logic.
It removes prefix, source and build paths.
>
>> + state = hashlib.sha256()
>> + state.update(build_hash.encode("utf-8"))
> Why the `utf-8` encode and then decode later?
The hash update needs a byte stream not a string. The define needs a
string and not a byte stream.
>
>> + conf.define(
>> + "RTEMS_BUILD_HASH",
>> + base64.urlsafe_b64encode(state.digest()).decode("utf-8"),
> Thank you for base64 encoding the result.
>
> Chris
--
embedded brains GmbH
Herr Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.huber at embedded-brains.de
phone: +49-89-18 94 741 - 16
fax: +49-89-18 94 741 - 08
Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier:
https://embedded-brains.de/datenschutzerklaerung/
More information about the devel
mailing list