[llvm-dev] RFC: Update LLVM_VERSION_SUFFIX CMake variable for release candidates

Tom Stellard via llvm-dev
Thu, 01 Jul 2021 19:45:15 -0000

On 7/1/21 9:18 AM, Harald van Dijk wrote:
> On 29/06/2021 18:39, Tom Stellard via llvm-dev wrote:
>> Hi,
>>
>> I would like to propose that we start using the LLVM_VERSION_SUFFIX
>> CMake variable for release candidates.  For example:
>> after the release/13.x branch is created, instead of changing
>> LLVM_VERSION_SUFFIX from "git" to "", we would
change it to "rc1",
>> then after the 13.0.0-rc1 release is tagged, we would update the
>> variable to "rc2", etc. Then right before the final release
has been
>> tagged, we would set it to ""
>> The library SONAME's currently include LLVM_VERSION_SUFFIX, so this
>> change will cause each release candidate to have a different SONAME
>> for libraries.  This is correct for X.Y.0 releases, since it's
possible
>> for a library's ABI to change between release candidates.  However,
>> for X.Y.1 releases, we do not want to modify the SONAME's at all,
so
>> the build system will need to be updated to accommodate this change.
>
> This would mean that the so-called release candidate is no longer a
candidate for release. Even if no problems are identified in 13.0.0-rc1, it is
still guaranteed that 13.0.0 will be different from 13.0.0-rc1. In particular,
this means if a distro were to do a rebuild against 13.0.0-rc1, and then no
further changes are needed and 13.0.0 can be released, the distro will still
need to rebuild everything that was already built against 13.0.0-rc1 against
13.0.0. The fact that the SONAME changes also means it's possible that other
projects adjust to wrongly account for the SONAME change in a way that happens
to work for the release candidates, but not for the actual release, so testing
with the release candidate suggests that everything is fine when in fact it
isn't.
>

As you point out, the disadvantage of my proposal is that the SONAME
will change between the last release candidate and the final release,
even though the ABI has not.  I agree this is not ideal.  However,
in my opinion, this is better than changing the ABI without changing
the SONAME, which is what can happen in some release candidates with
the current process.  Changing the ABI without changing the SONAME is
incorrect, and I would really like to find a way to fix this.

> I was working on changing my own testing procedures for my own system to
handle the current release candidate structure, where I am in much the same boat
as distros, except on a smaller scale. Currently, llvm-12.0.0rc5.src.tar.xz and
llvm-12.0.0.src.tar.xz are different files, but the only difference is that the
former extracts to an llvm-12.0.0rc5.src directory whereas the latter extracts
to a llvm-12.0.0.src directory, the archives are otherwise 100% identical, down
to the mtime of each individual file. I wanted to use this to create a build of
LLVM+clang 12.0.1-rc3 that, if 12.0.1-rc3 turns out to be the final release
candidate, will be bitwise identical to the same build of LLVM+clang 12.0.1 and
there will be no reason to re-test anything that worked with 12.0.1-rc3 against
12.0.1, allowing me to avoid a further mass rebuild once 12.0.1 is released.
Under your proposed scheme, this may continue to work for x.0.1 releases, I am
not sure whether it would continue to work
> for x.1.0 releases, but it would definitely cease to be an option for x.0.0
releases. That seems a shame, because it means the release candidates will be
less tested than they would otherwise be.
>

The fact that we have to produce new tarballs for the final release
even when nothing has changed since the last release candidate is
an inefficiency in our process and is something I would also like
to fix, but I'm not sure exactly how.  I do acknowledge that this
proposal means that we are locking ourselves in to always doing
a separate final release build.  Maybe there is some middle ground
where we can fix our SONAME usage without forcing unnecessary builds.

-Tom

> Cheers,
> Harald van Dijk
>