[CMake] How to calculate a value "on the fly" for use with gcc compiler option?

Jörg Förstner Joerg.Foerstner at ubidyne.com
Wed Jul 22 06:04:17 EDT 2009


Hi Tyler,

> [...] why do you need to do all this?

I need this to binary compare the built libraries of two releases.
If a library of the current release build is binary equal to the library of the previous release build, I can be sure that there had been no change at all.

Unfortunately without the option "-frandom-seed", the object files and libraries of subsequent builds are binary different, even when no source file had been changed.

Cheers,
Joerg


> -----Ursprüngliche Nachricht-----
> Von: Tyler Roscoe [mailto:tyler at cryptio.net] 
> Gesendet: Freitag, 17. Juli 2009 21:35
> An: Jörg Förstner
> Cc: cmake at cmake.org
> Betreff: Re: [CMake] How to calculate a value "on the fly" 
> for use with gcc compiler option?
> 
> On Fri, Jul 17, 2009 at 08:32:38PM +0200, Jörg Förstner wrote:
> > We use gcc's option "-frandom-seed=<value>", which uses a 
> given value as a starting point for it's random number generator.
> > As every file shall have a unique random seed, we calculate 
> the MD5 checksum of each source file "on the fly".
> > This checksum is then used as a value for the option 
> "-frandom-seed".
> 
> This sounds pretty crazy. Not really relevant to your 
> question, but why
> do you need to do all this? Are you trying obfuscate your object files
> to prevent decompilation or something?
> 
> > Here's how the current compile rule in the old Makefile looks like:
> >   $(CC) -frandom-seed=$(shell md5sum $< | sed 's/\(.*\) 
> .*/\1/') $(CCFLAGS) -c $< -o $@
> > 
> > I tried to do this in cmake, but I only have this command:
> > ADD_DEFINITIONS( 
> >   "-frandom-seed=$(shell md5sum $< | sed 's/\(.*\) .*/\1/')"
> > )
> > 
> > But how can I determine the current filename and replace 
> "$<" by the filename?
> > How can this be made using cmake?
> 
> I would move all the md5sum and sed complexity into a script and then
> just iterate over your source files, sending each to the script and
> getting the appropriate output. Something like this:
> 
> foreach (_file ${src_files})
>     execute_process (my_md5sum_sed_script ${_file}
>         OUTPUT_VARIABLE _seed)
>     add_definitions (...)
> endforeach ()
> 
> 
> hth,
> tyler
> 


More information about the CMake mailing list