Mercurial > hg > CbC > CbC_llvm
view llvm/utils/release/export.sh @ 252:1f2b6ac9f198 llvm-original
LLVM16-1
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 18 Aug 2023 09:04:13 +0900 |
parents | c4bab56944e8 |
children |
line wrap: on
line source
#!/bin/bash #===-- tag.sh - Tag the LLVM release candidates ----------------------------===# # # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. # See https://llvm.org/LICENSE.txt for license information. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception # #===------------------------------------------------------------------------===# # # Create branches and release candidates for the LLVM release. # #===------------------------------------------------------------------------===# set -e projects="llvm bolt clang cmake compiler-rt libcxx libcxxabi libclc clang-tools-extra polly lldb lld openmp libunwind mlir flang third-party" release="" rc="" yyyymmdd=$(date +'%Y%m%d') snapshot="" template='${PROJECT}-${RELEASE}${RC}.src.tar.xz' usage() { cat <<EOF Export the Git sources and build tarballs from them. Usage: $(basename $0) [-release|--release <major>.<minor>.<patch>] [-rc|--rc <num>] [-final|--final] [-git-ref|--git-ref <git-ref>] [-template|--template <template>] Flags: -release | --release <major>.<minor>.<patch> The version number of the release -rc | --rc <num> The release candidate number -final | --final When provided, this option will disable the rc flag -git-ref | --git-ref <git-ref> (optional) Use <git-ref> to determine the release and don't export the test-suite files -template | --template <template> (optional) Possible placeholders: \$PROJECT \$YYYYMMDD \$GIT_REF \$RELEASE \$RC. Defaults to '${template}'. The following list shows the filenames (with <placeholders>) for the artifacts that are being generated (given that you don't touch --template). $(echo "$projects "| sed 's/\([a-z-]\+\) / * \1-<RELEASE><RC>.src.tar.xz \n/g') Additional files being generated: * llvm-project-<RELEASE><RC>.src.tar.xz (the complete LLVM source project) * test-suite-<RELEASE><RC>.src.tar.xz (only when not using --git-ref) To ease the creation of snapshot builds, we also provide these files * llvm-release-<YYYYMMDD>.txt (contains the <RELEASE> as a text) * llvm-rc-<YYYYMMDD>.txt (contains the rc version passed to the invocation of $(basename $0)) * llvm-git-revision-<YYYYMMDD>.txt (contains the current git revision sha1) Example values for the placeholders: * <RELEASE> -> 13.0.0 * <YYYYMMDD> -> 20210414 (the date when executing this script) * <RC> -> rc4 (will be empty when using --git-ref) In order to generate snapshots of the upstream main branch you could do this for example: $(basename $0) --git-ref upstream/main --template '\${PROJECT}-\${YYYYMMDD}.src.tar.xz' EOF } template_file() { export PROJECT=$1 YYYYMMDD=$yyyymmdd RC=$rc RELEASE=$release GIT_REF=$git_rev basename $(echo $template | envsubst '$PROJECT $RELEASE $RC $YYYYMMDD $GIT_REF') unset PROJECT YYYYMMDD RC RELEASE GIT_REF } export_sources() { local tag="llvmorg-$release" llvm_src_dir=$(readlink -f $(dirname "$(readlink -f "$0")")/../../..) [ -d $llvm_src_dir/.git ] || ( echo "No git repository at $llvm_src_dir" ; exit 1 ) # Determine the release by fetching the version from LLVM's CMakeLists.txt # in the specified git ref. if [ -n "$snapshot" ]; then release=$(git -C $llvm_src_dir show $snapshot:llvm/CMakeLists.txt | grep -ioP 'set\(\s*LLVM_VERSION_(MAJOR|MINOR|PATCH)\s\K[0-9]+' | paste -sd '.') fi tag="llvmorg-$release" if [ "$rc" = "final" ]; then rc="" else tag="$tag-$rc" fi target_dir=$(pwd) echo "Creating tarball for llvm-project ..." pushd $llvm_src_dir/ tree_id=$tag [ -n "$snapshot" ] && tree_id="$snapshot" echo "Tree ID to archive: $tree_id" # This might be a surprise but a package like clang or compiler-rt don't # know about the LLVM version itself. That's why we also export a the # llvm-version*-<YYYYMMDD> and llvm-git*-<YYYYMMDD> files. git_rev=$(git rev-parse $tree_id) echo "git revision: $git_rev" echo "$release" > $target_dir/llvm-release-$yyyymmdd.txt echo "$rc" > $target_dir/llvm-rc-$yyyymmdd.txt echo "$git_rev" > $target_dir/llvm-git-revision-$yyyymmdd.txt git archive --prefix=llvm-project-$release$rc.src/ $tree_id . | xz -T0 >$target_dir/$(template_file llvm-project) popd if [ -z "$snapshot" ]; then if [ ! -d test-suite-$release$rc.src ]; then echo "Fetching LLVM test-suite source ..." mkdir -p test-suite-$release$rc.src curl -L https://github.com/llvm/test-suite/archive/$tag.tar.gz | \ tar -C test-suite-$release$rc.src --strip-components=1 -xzf - fi echo "Creating tarball for test-suite ..." tar --sort=name --owner=0 --group=0 \ --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime \ -cJf test-suite-$release$rc.src.tar.xz test-suite-$release$rc.src fi for proj in $projects; do echo "Creating tarball for $proj ..." pushd $llvm_src_dir/$proj git archive --prefix=$proj-$release$rc.src/ $tree_id . | xz -T0 >$target_dir/$(template_file $proj) popd done } while [ $# -gt 0 ]; do case $1 in -release | --release ) shift release=$1 ;; -rc | --rc ) shift rc="rc$1" ;; -final | --final ) rc="final" ;; -git-ref | --git-ref ) shift snapshot="$1" ;; -template | --template ) shift template="$1" ;; -h | -help | --help ) usage exit 0 ;; * ) echo "unknown option: $1" usage exit 1 ;; esac shift done if [ -n "$snapshot" ]; then if [[ "$rc" != "" || "$release" != "" ]]; then echo "error: must not specify -rc or -release when creating a snapshot" exit 1 fi elif [ -z "$release" ]; then echo "error: need to specify a release version" exit 1 fi # Make sure umask is not overly restrictive. umask 0022 export_sources exit 0