X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=docs%2FHowToReleaseLLVM.html;h=396b4fe0ebef90dc5cd1fa37e8f36e67336fbaa2;hb=32dc4d9cd76795f43478e80eec9b1e073adf0f98;hp=2ea8b431e98aee1f14bd3cd9998c7a36d5d0b4dd;hpb=1a59243c252a43333e426fb8e800a234a7e6b1ef;p=oota-llvm.git diff --git a/docs/HowToReleaseLLVM.html b/docs/HowToReleaseLLVM.html index 2ea8b431e98..396b4fe0ebe 100644 --- a/docs/HowToReleaseLLVM.html +++ b/docs/HowToReleaseLLVM.html @@ -2,12 +2,13 @@ "http://www.w3.org/TR/html4/strict.dtd"> + How To Release LLVM To The Public -
How To Release LLVM To The Public
+

How To Release LLVM To The Public

  1. Introduction
  2. Qualification Criteria
  3. @@ -23,22 +24,22 @@ -
    Introduction
    +

    Introduction

    -
    +

    This document contains information about successfully releasing LLVM — - including subprojects: e.g., llvm-gcc and clang — to + including subprojects: e.g., clang and dragonegg — to the public. It is the Release Manager's responsibility to ensure that a high quality build of LLVM is released.

    - +

    Release Timeline

    -
    +

    LLVM is released on a time based schedule — roughly every 6 months. We do not normally have dot releases because of the nature of LLVM's incremental @@ -76,37 +77,37 @@

    - +

    Release Process

    -
    +
      -
    1. Release Administrative Tasks
    2. +
    3. Release Administrative Tasks
      1. Create Release Branch
      2. Update Version Numbers
      -
    4. Building the Release
    5. + +
    6. Building the Release
      1. Build the LLVM Source Distributions
      2. Build LLVM
      3. -
      4. Build the LLVM-GCC Binary Distribution
      5. Build the Clang Binary Distribution
      6. Target Specific Build Details
      -
    7. Release Qualification Criteria
    8. + +
    9. Release Qualification Criteria
      1. Qualify LLVM
      2. -
      3. Qualify LLVM-GCC
      4. Qualify Clang
      5. Specific Target Qualification Details
      +
    10. Community Testing
    11. Release Patch Rules
    12. -
    13. Release final tasks
    14. - +
    15. Release final tasks
      1. Update Documentation
      2. Tag the LLVM Final Release
      3. @@ -114,14 +115,13 @@
      4. Update the LLVM Website
      5. Announce the Release
      +
    -
    - - +

    Release Administrative Tasks

    -
    +

    This section describes a few administrative tasks that need to be done for the release process to begin. Specifically, it involves:

    @@ -132,12 +132,10 @@
  4. Tagging release candidates for the release team to begin testing
  5. -
    - - +

    Create Release Branch

    -
    +

    Branch the Subversion trunk using the following procedure:

    @@ -150,25 +148,25 @@
  6. Verify that the current Subversion trunk is in decent shape by examining nightly tester and buildbot results.

  7. -
  8. Create the release branch for llvm, llvm-gcc-4.2, - clang, and the test-suite from the last known good - revision. The branch's name is release_XY, where X is - the major and Y the minor release numbers. The branches should be - created using the following commands:

    +
  9. Create the release branch for llvm, clang, + the test-suite, and dragonegg from the last known good + revision. The branch's name is release_XY, + where X is the major and Y the minor release + numbers. The branches should be created using the following commands:

     $ svn copy https://llvm.org/svn/llvm-project/llvm/trunk \
                https://llvm.org/svn/llvm-project/llvm/branches/release_XY
     
    -$ svn copy https://llvm.org/svn/llvm-project/llvm-gcc-4.2/trunk \
    -           https://llvm.org/svn/llvm-project/llvm-gcc-4.2/branches/release_XY
    +$ svn copy https://llvm.org/svn/llvm-project/cfe/trunk \
    +           https://llvm.org/svn/llvm-project/cfe/branches/release_XY
    +
    +$ svn copy https://llvm.org/svn/llvm-project/dragonegg/trunk \
    +           https://llvm.org/svn/llvm-project/dragonegg/branches/release_XY
     
     $ svn copy https://llvm.org/svn/llvm-project/test-suite/trunk \
                https://llvm.org/svn/llvm-project/test-suite/branches/release_XY
    -
    -$ svn copy https://llvm.org/svn/llvm-project/cfe/trunk \
    -           https://llvm.org/svn/llvm-project/cfe/branches/release_XY
     
  10. @@ -183,11 +181,11 @@ $ svn copy https://llvm.org/svn/llvm-project/cfe/trunk \
     $ svn co https://llvm.org/svn/llvm-project/llvm/branches/release_XY llvm-X.Y
     
    -$ svn co https://llvm.org/svn/llvm-project/llvm-gcc-4.2/branches/release_XY llvm-gcc-4.2-X.Y
    +$ svn co https://llvm.org/svn/llvm-project/cfe/branches/release_XY clang-X.Y
     
    -$ svn co https://llvm.org/svn/llvm-project/test-suite/branches/release_XY test-suite-X.Y
    +$ svn co https://llvm.org/svn/llvm-project/dragonegg/branches/release_XY dragonegg-X.Y
     
    -$ svn co https://llvm.org/svn/llvm-project/cfe/branches/release_XY clang-X.Y
    +$ svn co https://llvm.org/svn/llvm-project/test-suite/branches/release_XY test-suite-X.Y
     
@@ -195,9 +193,9 @@ $ svn co https://llvm.org/svn/llvm-project/cfe/branches/release_XY clang- -
Update LLVM Version
+

Update LLVM Version

-
+

After creating the LLVM release branch, update the release branches' autoconf and configure.ac versions from 'X.Ysvn' @@ -211,14 +209,14 @@ $ svn co https://llvm.org/svn/llvm-project/cfe/branches/release_XY clang-

-
Build the LLVM Release Candidates
+

Build the LLVM Release Candidates

-
+
-

Create release candidates for llvm, llvm-gcc, - clang, and the LLVM test-suite by tagging the branch with - the respective release candidate number. For instance, to create Release - Candidate 1 you would issue the following commands:

+

Create release candidates for llvm, clang, + dragonegg, and the LLVM test-suite by tagging the branch + with the respective release candidate number. For instance, to + create Release Candidate 1 you would issue the following commands:

@@ -226,17 +224,17 @@ $ svn mkdir https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_XY
 $ svn copy https://llvm.org/svn/llvm-project/llvm/branches/release_XY \
            https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_XY/rc1
 
-$ svn mkdir https://llvm.org/svn/llvm-project/llvm-gcc-4.2/tags/RELEASE_XY
-$ svn copy https://llvm.org/svn/llvm-project/llvm-gcc-4.2/branches/release_XY \
-           https://llvm.org/svn/llvm-project/llvm-gcc-4.2/tags/RELEASE_XY/rc1
+$ svn mkdir https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_XY
+$ svn copy https://llvm.org/svn/llvm-project/cfe/branches/release_XY \
+           https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_XY/rc1
+
+$ svn mkdir https://llvm.org/svn/llvm-project/dragonegg/tags/RELEASE_XY
+$ svn copy https://llvm.org/svn/llvm-project/dragonegg/branches/release_XY \
+           https://llvm.org/svn/llvm-project/dragonegg/tags/RELEASE_XY/rc1
 
 $ svn mkdir https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_XY
 $ svn copy https://llvm.org/svn/llvm-project/test-suite/branches/release_XY \
            https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_XY/rc1
-
-$ svn mkdir https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_XY
-$ svn copy https://llvm.org/svn/llvm-project/cfe/branches/release_XY \
-           https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_XY/rc1
 
@@ -252,25 +250,27 @@ $ svn copy https://llvm.org/svn/llvm-project/cfe/branches/release_XY \
 $ svn export https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_XY/rc1 llvm-X.Yrc1
-$ svn export https://llvm.org/svn/llvm-project/llvm-gcc-4.2/tags/RELEASE_XY/rc1 llvm-gcc4.2-X.Yrc1
-$ svn export https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_XY/rc1 llvm-test-X.Yrc1
 $ svn export https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_XY/rc1 clang-X.Yrc1
+$ svn export https://llvm.org/svn/llvm-project/dragonegg/tags/RELEASE_XY/rc1 dragonegg-X.Yrc1
+$ svn export https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_XY/rc1 llvm-test-X.Yrc1
 
 $ tar -cvf - llvm-X.Yrc1        | gzip > llvm-X.Yrc1.src.tar.gz
-$ tar -cvf - llvm-test-X.Yrc1   | gzip > llvm-test-X.Yrc1.src.tar.gz
-$ tar -cvf - llvm-gcc4.2-X.Yrc1 | gzip > llvm-gcc-4.2-X.Yrc1.src.tar.gz
 $ tar -cvf - clang-X.Yrc1       | gzip > clang-X.Yrc1.src.tar.gz
+$ tar -cvf - dragonegg-X.Yrc1   | gzip > dragonegg-X.Yrc1.src.tar.gz
+$ tar -cvf - llvm-test-X.Yrc1   | gzip > llvm-test-X.Yrc1.src.tar.gz
 
+
+ -
Building the Release
+

Building the Release

-
+
-

The builds of llvm, llvm-gcc, and clang +

The builds of llvm, clang, and dragonegg must be free of errors and warnings in Debug, Release+Asserts, and Release builds. If all builds are clean, then the release passes Build Qualification.

@@ -284,51 +284,21 @@ $ tar -cvf - clang-X.Yrc1 | gzip > clang-X.Yrc1.src.tar.g ReleaseENABLE_OPTIMIZED=1 DISABLE_ASSERTIONS=1 -
- - +

Build LLVM

-
+

Build Debug, Release+Asserts, and Release versions of llvm on all supported platforms. Directions to build - llvm are - here.

+ llvm are here.

- +

Build Clang Binary Distribution

-
- -

Creating the llvm-gcc binary distribution (Release/Optimized) - requires performing the following steps for each supported platform:

- -
    -
  1. Build the llvm-gcc front-end by following the directions in - the README.LLVM file. The front-end must be compiled with C, C++, - Objective-C (Mac only), Objective-C++ (Mac only), and Fortran - support.

  2. - -
  3. Boostrapping must be enabled.

  4. - -
  5. Be sure to build with LLVM_VERSION_INFO=X.Y, where X - is the major and Y is the minor release numbers.

  6. - -
  7. Copy the installation directory to a directory named for the specific - target. For example on Red Hat Enterprise Linux, the directory would be - named llvm-gcc4.2-2.6-x86-linux-RHEL4. Archive and compress the - new directory.

  8. -
- -
- - - - -
+

Creating the clang binary distribution (Debug/Release+Asserts/Release) requires performing the following steps for @@ -338,8 +308,8 @@ $ tar -cvf - clang-X.Yrc1 | gzip > clang-X.Yrc1.src.tar.g

  • Build clang according to the directions here.
  • -
  • Build both a debug and release version of clang. The binary will be the - release build.
  • +
  • Build both a Debug and Release version of clang. The binary will be the + Release build.
  • Package clang (details to follow).
  • @@ -347,32 +317,33 @@ $ tar -cvf - clang-X.Yrc1 | gzip > clang-X.Yrc1.src.tar.g
    - +

    Target Specific Build Details

    -
    +

    The table below specifies which compilers are used for each Arch/OS - combination when qualifying the build of llvm, llvm-gcc, - and clang.

    + combination when qualifying the build of llvm, clang, + and dragonegg.

    - - - - - - - - + + + + + + + +
    ArchitectureOScompiler
    x86-32Mac OS 10.5gcc 4.0.1
    x86-32Linuxgcc 4.2.X, gcc 4.3.X
    x86-32FreeBSDgcc 4.2.X
    x86-32mingwgcc 3.4.5
    x86-64Mac OS 10.5gcc 4.0.1
    x86-64Linuxgcc 4.2.X, gcc 4.3.X
    x86-64FreeBSDgcc 4.2.X
    Architecture OS compiler
    x86-32 Mac OS 10.5 gcc 4.0.1
    x86-32 Linux gcc 4.2.X, gcc 4.3.X
    x86-32 FreeBSD gcc 4.2.X
    x86-32 mingw gcc 3.4.5
    x86-64 Mac OS 10.5 gcc 4.0.1
    x86-64 Linux gcc 4.2.X, gcc 4.3.X
    x86-64 FreeBSD gcc 4.2.X
    +
    + - +

    Building the Release

    -
    +

    A release is qualified when it has no regressions from the previous release (or baseline). Regressions are related to correctness first and performance @@ -388,36 +359,21 @@ Building the Release

    criteria, but these are the criteria which we found to be most important and which must be satisfied before a release can go out

    -
    - - +

    Qualify LLVM

    -
    +

    LLVM is qualified when it has a clean test run without a front-end. And it - has no regressions when using either llvm-gcc or clang with - the test-suite from the previous release.

    + has no regressions when using either clang or dragonegg + with the test-suite from the previous release.

    - - -
    - -

    LLVM-GCC is qualified when front-end specific tests in the - llvm regression test suite all pass and there are no regressions in - the test-suite.

    +

    Qualify Clang

    -

    We do not use the GCC DejaGNU test suite as release criteria.

    - -
    - - - - -
    +

    Clang is qualified when front-end specific tests in the llvm dejagnu test suite all pass, clang's own test suite passes @@ -426,26 +382,27 @@ Building the Release

    - +

    Specific Target Qualification Details

    -
    +
    - - - - - - - + + + + + + +
    ArchitectureOSllvm-gcc baselineclang baselinetests
    x86-32Linuxlast releaselast releasellvm dejagnu, clang tests, test-suite (including spec)
    x86-32FreeBSDnonelast releasellvm dejagnu, clang tests, test-suite
    x86-32mingwlast releasenoneQT
    x86-64Mac OS 10.Xlast releaselast releasellvm dejagnu, clang tests, test-suite (including spec)
    x86-64Linuxlast releaselast releasellvm dejagnu, clang tests, test-suite (including spec)
    x86-64FreeBSDnonelast releasellvm dejagnu, clang tests, test-suite
    Architecture OS clang baseline tests
    x86-32 Linux last release llvm dejagnu, clang tests, test-suite (including spec)
    x86-32 FreeBSD last release llvm dejagnu, clang tests, test-suite
    x86-32 mingw none QT
    x86-64 Mac OS 10.X last release llvm dejagnu, clang tests, test-suite (including spec)
    x86-64 Linux last release llvm dejagnu, clang tests, test-suite (including spec)
    x86-64 FreeBSD last release llvm dejagnu, clang tests, test-suite
    +
    + - -
    +

    Community Testing

    +

    Once all testing has been completed and appropriate bugs filed, the release candidate tarballs are put on the website and the LLVM community is @@ -453,14 +410,12 @@ Qualification Details

    1. Download llvm-X.Y, llvm-test-X.Y, and the - appropriate llvm-gcc and/or clang binary. Build - LLVM. Run make check and the full LLVM test suite (make - TEST=nightly report).
    2. + appropriate clang binary. Build LLVM. Run make check and + the full LLVM test suite (make TEST=nightly report).
    3. Download llvm-X.Y, llvm-test-X.Y, and the - llvm-gcc and/or clang source. Compile everything. Run - make check and the full LLVM test suite (make TEST=nightly - report).
    4. + clang sources. Compile everything. Run make check and + the full LLVM test suite (make TEST=nightly report).

    Ask LLVM developers to submit the test suite report and make check @@ -481,9 +436,9 @@ Qualification Details

    - +

    Release Patch Rules

    -
    +

    Below are the rules regarding patching the release branch:

    @@ -505,22 +460,18 @@ Qualification Details
    - +

    Release Final Tasks

    -
    +

    The final stages of the release process involves tagging the "final" release branch, updating documentation that refers to the release, and updating the demo page.

    -
    - - - +

    Update Documentation

    -
    +

    Review the documentation and ensure that it is up to date. The "Release Notes" must be updated to reflect new features, bug fixes, new known issues, @@ -532,9 +483,9 @@ Qualification Details

    - +

    Tag the LLVM Final Release

    -
    +

    Tag the final release sources using the following procedure:

    @@ -543,33 +494,33 @@ Qualification Details
    $ svn copy https://llvm.org/svn/llvm-project/llvm/branches/release_XY \ https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_XY/Final -$ svn copy https://llvm.org/svn/llvm-project/llvm-gcc-4.2/branches/release_XY \ - https://llvm.org/svn/llvm-project/llvm-gcc-4.2/tags/RELEASE_XY/Final +$ svn copy https://llvm.org/svn/llvm-project/cfe/branches/release_XY \ + https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_XY/Final + +$ svn copy https://llvm.org/svn/llvm-project/dragonegg/branches/release_XY \ + https://llvm.org/svn/llvm-project/dragonegg/tags/RELEASE_XY/Final $ svn copy https://llvm.org/svn/llvm-project/test-suite/branches/release_XY \ https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_XY/Final - -$ svn copy https://llvm.org/svn/llvm-project/cfe/branches/release_XY \ - https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_XY/Final
    +
    + - +

    Update the LLVM Demo Page

    -
    +

    The LLVM demo page must be updated to use the new release. This consists of - using the new llvm-gcc binary and building LLVM.

    - -
    + using the new clang binary and building LLVM.

    - +

    Update the LLVM Website

    -
    +

    The website must be updated before the release announcement is sent out. Here is what to do:

    @@ -579,8 +530,8 @@ $ svn copy https://llvm.org/svn/llvm-project/cfe/branches/release_XY \
  • Create a new subdirectory X.Y in the releases directory.
  • -
  • Commit the llvm, test-suite, llvm-gcc source, - clang source, clang binaries, and llvm-gcc +
  • Commit the llvm, test-suite, clang source, + clang binaries, dragonegg source, and dragonegg binaries in this new directory.
  • Copy and commit the llvm/docs and LICENSE.txt files @@ -603,14 +554,18 @@ $ svn copy https://llvm.org/svn/llvm-project/cfe/branches/release_XY \
  • - +

    Announce the Release

    -
    +

    Have Chris send out the release announcement when everything is finished.

    +
    + +
    +
    @@ -618,7 +573,7 @@ $ svn copy https://llvm.org/svn/llvm-project/cfe/branches/release_XY \ src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"> Valid HTML 4.01 - The LLVM Compiler Infrastructure + The LLVM Compiler Infrastructure
    Last modified: $Date$