Created
August 17, 2024 19:38
-
-
Save ekpyron/acec5b073eae21bdde426427664ada9b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash -e | |
LLVM_VERSION=18.1.8 | |
MAKEFLAGS=-j16 | |
if [ $# -ne 1 ]; then | |
echo "Usage: $0 /path/to/output/clang-format" | |
exit 1 | |
fi | |
OUTPUT="$1" | |
if [ -e "$OUTPUT" ]; then | |
echo "$OUTPUT already exists." | |
exit 1 | |
fi | |
if touch "$OUTPUT"; then | |
OUTPUT="$(realpath "$OUTPUT")" | |
rm "$OUTPUT" | |
else | |
echo "Cannot write to $OUTPUT." | |
exit 1 | |
fi | |
echo "Output will be written to: $OUTPUT" | |
WORKDIR=$(mktemp -d) | |
function cleanup() | |
{ | |
if [ -d $WORKDIR ]; then | |
echo "Leaving partial build behind in $WORKDIR." | |
fi | |
} | |
trap cleanup EXIT | |
pushd $WORKDIR | |
wget -q --show-progress https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/cmake-${LLVM_VERSION}.src.tar.xz -O cmake.tar.xz | |
wget -q --show-progress https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-${LLVM_VERSION}.src.tar.xz -O llvm.tar.xz | |
wget -q --show-progress https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/clang-${LLVM_VERSION}.src.tar.xz -O clang.tar.xz | |
wget -q --show-progress https://gist.githubusercontent.com/ekpyron/07d3796f27527b41784546df20200fda/raw/c02b9495bd12c8f3ff9df8604508dce6a4cef574/clang-format.patch | |
sha256sum -c - << EOF | |
5724fe0a13087d5579104cedd2f8b3bc10a212fb79a0fcdac98f4880e19f4519 clang.tar.xz | |
b3e9ac13fa34c0502fce4f171d2d354a5c2bdfc305f9d4817c338c35cec5d873 clang-format.patch | |
59badef592dd34893cd319d42b323aaa990b452d05c7180ff20f23ab1b41e837 cmake.tar.xz | |
f68cf90f369bc7d0158ba70d860b0cb34dbc163d6ff0ebc6cfa5e515b9b2e28d llvm.tar.xz | |
EOF | |
tar -xf clang.tar.xz | |
tar -xf cmake.tar.xz | |
tar -xf llvm.tar.xz | |
rename -v -- "-${LLVM_VERSION}.src" '' cmake-${LLVM_VERSION}.src | |
pushd llvm-${LLVM_VERSION}.src | |
mkdir build | |
cd build | |
cmake \ | |
-G Ninja \ | |
-DCMAKE_BUILD_TYPE=Release \ | |
-DCMAKE_INSTALL_PREFIX=$WORKDIR \ | |
-DCMAKE_PREFIX_PATH=$WORKDIR \ | |
-DLLVM_BUILD_STATIC=ON \ | |
-DLLVM_BUILD_TOOLS=OFF \ | |
-DLLVM_ENABLE_LIBEDIT=OFF \ | |
-DLLVM_ENABLE_LIBPFM=OFF \ | |
-DLLVM_ENABLE_LIBXML2=OFF \ | |
-DLLVM_ENABLE_OCAMLDOC=OFF \ | |
-DLLVM_ENABLE_PLUGINS=OFF \ | |
-DLLVM_ENABLE_TERMINFO=OFF \ | |
-DLLVM_ENABLE_ZLIB=OFF \ | |
-DLLVM_ENABLE_ZSTD=OFF \ | |
-DLLVM_INCLUDE_BENCHMARKS=OFF \ | |
-DLLVM_INCLUDE_DOCS=OFF \ | |
-DLLVM_INCLUDE_EXAMPLES=OFF \ | |
-DLLVM_INCLUDE_TESTS=OFF \ | |
-DLLVM_INCLUDE_TOOLS=OFF \ | |
-DLLVM_INCLUDE_UTILS=OFF \ | |
.. | |
ninja | |
sed -i -e 's/EXISTS "\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}\/bin\/llvm-tblgen"/FALSE/' utils/TableGen/cmake_install.cmake | |
ninja install | |
popd | |
pushd clang-${LLVM_VERSION}.src | |
# clang builds have issues with some locale settings | |
export LC_ALL=C | |
export LC_ADDRESS=C | |
export LC_MEASUREMENT=C | |
export LC_MONETARY=C | |
export LC_NAME=C | |
export LC_NUMERIC=C | |
export LC_PAPER=C | |
export LC_TELEPHONE=C | |
export LC_TIME=C | |
patch -Np1 -i ../clang-format.patch | |
mkdir build | |
cd build | |
cmake \ | |
-G Ninja \ | |
-DCMAKE_BUILD_TYPE=Release \ | |
-DCMAKE_INSTALL_PREFIX=$WORKDIR \ | |
-DCMAKE_PREFIX_PATH=$WORKDIR \ | |
-DCLANG_LINK_CLANG_DYLIB=OFF \ | |
-DLLVM_BUILD_STATIC=ON \ | |
-DENABLE_LINKER_BUILD_ID=ON \ | |
-DLLVM_BUILD_DOCS=OFF \ | |
-DLLVM_BUILD_TESTS=OFF \ | |
-DLLVM_ENABLE_RTTI=OFF \ | |
-DLLVM_ENABLE_SPHINX=OFF \ | |
-DLIBCLANG_BUILD_STATIC=ON \ | |
-DLLVM_ENABLE_LIBXML2=OFF \ | |
-DCLANG_ENABLE_LIBXML2=OFF \ | |
-DCLANG_INCLUDE_TESTS=OFF \ | |
-DCLANG_PLUGIN_SUPPORT=OFF \ | |
-DLLVM_EXTERNAL_LIT=/usr/bin/lit \ | |
-DLLVM_INCLUDE_DOCS=OFF \ | |
-DLLVM_LINK_LLVM_DYLIB=OFF \ | |
-DBUILD_SHARED_LIBS=OFF \ | |
-DCLANG_ENABLE_ARCMT=OFF \ | |
-DLLVM_LIBRARY_DIR="${WORKDIR}"/lib \ | |
-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra" \ | |
-DLLVM_MAIN_SRC_DIR="${WORKDIR}/llvm-${LLVM_VERSION}.src" \ | |
-DCMAKE_CXX_FLAGS="-s -flto" \ | |
-DSPHINX_WARNINGS_AS_ERRORS=OFF \ | |
-DCMAKE_EXE_LINKER_FLAGS=-static \ | |
-DLLVM_INCLUDE_TESTS=OFF \ | |
.. | |
ninja clang-format | |
install -m755 bin/clang-format "$OUTPUT" | |
popd | |
popd | |
rm -rf $WORKDIR | |
echo | |
echo "Successfully built patched static clang-format at $OUTPUT." | |
echo |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment