1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
|
#!/bin/bash
#===-- build-docs.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
#
#===------------------------------------------------------------------------===#
#
# Build documentation for LLVM releases.
#
# Required Packages:
# * Fedora:
# * dnf install doxygen texlive-epstopdf ghostscript \
# ninja-build gcc-c++
# * pip install --user -r ./llvm/docs/requirements.txt
# * Ubuntu:
# * apt-get install doxygen \
# ninja-build graphviz texlive-font-utils
# * pip install --user -r ./llvm/docs/requirements.txt
#===------------------------------------------------------------------------===#
set -e
builddir=docs-build
srcdir=$(readlink -f $(dirname "$(readlink -f "$0")")/../..)
usage() {
echo "Build the documentation for an LLVM release. This only needs to be "
echo "done for -final releases."
echo "usage: `basename $0`"
echo " "
echo " -release <num> Fetch the tarball for release <num> and build the "
echo " documentation from that source."
echo " -srcdir <dir> Path to llvm source directory with CMakeLists.txt"
echo " (optional) default: $srcdir"
echo " -no-doxygen Don't build Doxygen docs"
echo " -no-sphinx Don't build Spinx docs"
}
package_doxygen() {
project=$1
proj_dir=$2
output=${project}_doxygen-$release
mv $builddir/$proj_dir/docs/doxygen/html $output
tar -cJf $output.tar.xz $output
}
while [ $# -gt 0 ]; do
case $1 in
-release )
shift
release=$1
;;
-srcdir )
shift
custom_srcdir=$1
;;
-no-doxygen )
no_doxygen="yes"
;;
-no-sphinx )
no_sphinx="yes"
;;
* )
echo "unknown option: $1"
usage
exit 1
;;
esac
shift
done
if [ -n "$release" -a -n "$custom_srcdir" ]; then
echo "error: Cannot specify both -srcdir and -release options"
exit 1
fi
if [ -n "$custom_srcdir" ]; then
srcdir="$custom_srcdir"
fi
# Set default source directory if one is not supplied
if [ -n "$release" ]; then
git_ref=llvmorg-$release
if [ -d llvm-project ]; then
echo "error llvm-project directory already exists"
exit 1
fi
mkdir -p llvm-project
pushd llvm-project
curl -L https://github.com/llvm/llvm-project/archive/$git_ref.tar.gz | tar --strip-components=1 -xzf -
popd
srcdir="./llvm-project/llvm"
fi
if [ "$no_doxygen" == "yes" ] && [ "$no_sphinx" == "yes" ]; then
echo "You can't specify both -no-doxygen and -no-sphinx, we have nothing to build then!"
exit 1
fi
if [ "$no_sphinx" != "yes" ]; then
echo "Sphinx: enabled"
sphinx_targets="docs-clang-html docs-clang-tools-html docs-flang-html docs-lld-html docs-llvm-html docs-polly-html"
sphinx_flag=" -DLLVM_ENABLE_SPHINX=ON -DSPHINX_WARNINGS_AS_ERRORS=OFF"
else
echo "Sphinx: disabled"
fi
if [ "$no_doxygen" != "yes" ]; then
echo "Doxygen: enabled"
doxygen_targets="$docs_target doxygen-clang doxygen-clang-tools doxygen-flang doxygen-llvm doxygen-mlir doxygen-polly"
doxygen_flag=" -DLLVM_ENABLE_DOXYGEN=ON -DLLVM_DOXYGEN_SVG=ON"
else
echo "Doxygen: disabled"
fi
cmake -G Ninja $srcdir -B $builddir \
-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld;polly;flang" \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_BUILD_DOCS=ON \
$sphinx_flag \
$doxygen_flag
ninja -C $builddir $sphinx_targets $doxygen_targets
cmake -G Ninja $srcdir/../runtimes -B $builddir/runtimes-doc \
-DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" \
-DLLVM_ENABLE_SPHINX=ON \
-DSPHINX_WARNINGS_AS_ERRORS=OFF
ninja -C $builddir/runtimes-doc \
docs-libcxx-html \
if [ "$no_doxygen" != "yes" ]; then
package_doxygen llvm .
package_doxygen clang tools/clang
package_doxygen clang-tools-extra tools/clang/tools/extra
package_doxygen flang tools/flang
fi
if [ "$no_sphinx" == "yes" ]; then
exit 0
fi
html_dir=$builddir/html-export/
for d in docs/ tools/clang/docs/ tools/lld/docs/ tools/clang/tools/extra/docs/ tools/polly/docs/ tools/flang/docs/; do
mkdir -p $html_dir/$d
mv $builddir/$d/html/* $html_dir/$d/
done
# Keep the documentation for the runtimes under /projects/ to avoid breaking existing links.
for d in libcxx/docs/; do
mkdir -p $html_dir/projects/$d
mv $builddir/runtimes-doc/$d/html/* $html_dir/projects/$d/
done
|