Created
August 17, 2024 20:11
-
-
Save ekpyron/36d56b02f15892c5d6db92a3e44aae52 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 | |
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 | |
git clone --depth 1 https://github.com/llvm/llvm-project.git | |
wget -q --show-progress https://gist.githubusercontent.com/ekpyron/07d3796f27527b41784546df20200fda/raw/c02b9495bd12c8f3ff9df8604508dce6a4cef574/clang-format.patch | |
sha256sum -c - << EOF | |
b3e9ac13fa34c0502fce4f171d2d354a5c2bdfc305f9d4817c338c35cec5d873 clang-format.patch | |
EOF | |
cd llvm-project | |
pushd llvm | |
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 | |
# 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