#!/bin/sh -e python -m venv venv . venv/bin/activate pip install sphinx recommonmark sed -i 's/!defined(_GCC_MAX_ALIGN_T)/& \&\& !defined(__DEFINED_max_align_t)/' libcxx/include/stddef.h sed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' compiler-rt/cmake/config-ix.cmake sed -i 's|\.lldb|.local/state/lldb|g' lldb/source/Host/common/Editline.cpp export DESTDIR="$1" cmake \ -G "Ninja" \ -B build \ -DCLANG_DEFAULT_CXX_STDLIB=libc++ \ -DCLANG_DEFAULT_RTLIB=compiler-rt \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_C_COMPILER=clang \ -DCMAKE_INSTALL_PREFIX=/usr \ -DCOMPILER_RT_EXCLUDE_ATOMIC_BUILTIN=OFF \ -DCOMPILER_RT_USE_BUILTINS_LIBRARY=ON \ -DLIBCXXABI_USE_COMPILER_RT=ON \ -DLIBCXXABI_USE_LLVM_UNWINDER=ON \ -DLIBCXX_CXX_ABI=libcxxabi \ -DLIBCXX_HAS_ATOMIC_LIB=OFF \ -DLIBCXX_HAS_MUSL_LIBC=ON \ -DLIBCXX_USE_COMPILER_RT=ON \ -DLIBUNWIND_USE_COMPILER_RT=ON \ -DLLDB_ENABLE_CURSES=ON \ -DLLDB_ENABLE_LIBEDIT=ON \ -DLLVM_BUILD_DOCS=ON \ -DLLVM_BUILD_EXAMPLES=OFF \ -DLLVM_BUILD_LLVM_DYLIB=ON \ -DLLVM_BUILD_TESTS=OFF \ -DLLVM_ENABLE_EH=ON \ -DLLVM_ENABLE_LIBCXX=ON \ -DLLVM_ENABLE_LIBEDIT=ON \ -DLLVM_ENABLE_LIBXML2=OFF \ -DLLVM_ENABLE_PROJECTS="clang;compiler-rt;libunwind;libcxxabi;libcxx;lld;lldb" \ -DLLVM_ENABLE_RTTI=ON \ -DLLVM_ENABLE_SPHINX=ON \ -DLLVM_ENABLE_TERMINFO=OFF \ -DLLVM_HOST_TRIPLE="$(clang -dumpmachine)" \ -DLLVM_INCLUDE_DOCS=ON \ -DLLVM_INSTALL_BINUTILS_SYMLINKS=ON \ -DLLVM_LINK_LLVM_DYLIB=ON \ -DLLVM_TARGETS_TO_BUILD="host;AMDGPU" \ -DSPHINX_OUTPUT_MAN=ON \ -DSPHINX_WARNINGS_AS_ERRORS=OFF \ -Wno-dev \ llvm cmake --build build cmake --install build # libc++abi header files mkdir -p "$1/usr" cp -r libcxxabi/include "$1/usr" ln -s ld.lld "$1/usr/bin/ld" ln -s clang "$1/usr/bin/cc" ln -s clang++ "$1/usr/bin/c++" ln -s clang++ "$1/usr/bin/cpp" for i in \ llvm-addr2line \ llvm-ar \ llvm-as \ llvm-dlltool \ llvm-nm \ llvm-objdump \ llvm-ranlib \ llvm-readelf \ llvm-size \ llvm-strings \ llvm-strip do to="$1/usr/bin/$(printf %s "$i" | cut -d "-" -f 2)" ln -sf "/usr/bin/$i" "$to" done install -m755 c99 "$1/usr/bin/c99" # Clang: Override libexec, the path is hardcoded, unfortunately. mv -f "$1/usr/libexec/ccc-analyzer" "$1/usr/lib/clang" mv -f "$1/usr/libexec/c++-analyzer" "$1/usr/lib/clang" rmdir "$1/usr/libexec" sed -i "s|libexec|lib/clang|" "$1/usr/bin/scan-build"