Skip to content

Instantly share code, notes, and snippets.

@lilianmoraru
Last active April 5, 2018 08:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lilianmoraru/d13c4e73c0bef0994353591fdd278d0b to your computer and use it in GitHub Desktop.
Save lilianmoraru/d13c4e73c0bef0994353591fdd278d0b to your computer and use it in GitHub Desktop.
Build locally your own optimized version of LLVM/Clang
#! /bin/bash
source_dir="" # Define this, example(this usually should be the device with the fastest Read perf): ${HOME:?}/git/llvm
build_dir="" # Define this, example(preferably a different device which can be slower): /ssd/llvm-build
install_prefix="" # Define this, example: /usr/local/llvm
release_branch="release_60"
update_project() {
local -r dir="${1:?}"
local -r branch="${2:?}"
(
cd "${dir}" || exit 1
git fetch origin "${branch}"
git clean -fdx
git reset --hard origin/"${branch}"
)
}
install_llvm() {
mkdir -p "${build_dir:?}"
cd "${build_dir}" || exit 1
rm -rf ./*
if [ -z "${LLVM_FIRST_RUN}" ]; then
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER="${install_prefix:?}/bin/clang" \
-DCMAKE_CXX_COMPILER="${install_prefix:?}/bin/clang++" \
-DCMAKE_RANLIB="${install_prefix:?}/bin/llvm-ranlib" \
-DCMAKE_AR="${install_prefix:?}/bin/llvm-ar" \
-DCMAKE_CXX_FLAGS="-O3 -mtune=native -march=native -m64 -mavx -fomit-frame-pointer -isystem /usr/include/ncurses" \
-DCMAKE_C_FLAGS="-O3 -mtune=native -march=native -m64 -mavx -fomit-frame-pointer -isystem /usr/include/ncurses" \
-DCMAKE_EXE_LINKER_FLAGS="-Wl,--as-needed -Wl,--build-id=sha1" \
-DCMAKE_MODULE_LINKER_FLAGS="-Wl,--as-needed -Wl,--build-id=sha1" \
-DCMAKE_SHARED_LINKER_FLAGS="-Wl,--as-needed -Wl,--build-id=sha1" \
-DLLVM_TARGETS_TO_BUILD=Native \
-DENABLE_LINKER_BUILD_ID=ON \
-DLLVM_ENABLE_PIC=ON \
-DLLVM_ENABLE_LLD=ON \
-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \
-DLLVM_ENABLE_LTO=Thin \
-DCMAKE_POLICY_DEFAULT_CMP0069=NEW \
-DLLVM_ENABLE_RTTI=ON \
-DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_INCLUDE_EXAMPLES=OFF \
-DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/python \
-DCMAKE_INSTALL_PREFIX="${install_prefix:?}" \
-C "${source_dir}/tools/clang/cmake/caches/PGO.cmake" \
-G Ninja "${source_dir}"
ninja stage2
else
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER=/usr/bin/gcc \
-DCMAKE_CXX_COMPILER=/usr/bin/g++ \
-DCMAKE_RANLIB=/usr/bin/ranlib \
-DCMAKE_AR=/usr/bin/ar \
-DCMAKE_POLICY_DEFAULT_CMP0069=NEW \
-DLLVM_ENABLE_RTTI=ON \
-DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_INCLUDE_EXAMPLES=OFF \
-DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/python \
-DCMAKE_INSTALL_PREFIX="${install_prefix:?}" \
-G Ninja "${source_dir}"
fi
ninja install
}
main() {
(
cd "$(dirname "${source_dir:?}")" || exit 1
if [ -z "${LLVM_FIRST_RUN}" ]; then
update_project "llvm/" "master" # stable
update_project "llvm/tools/clang" "master" # google/stable
update_project "llvm/projects/compiler-rt" "master" # google/stable
update_project "llvm/tools/clang/tools/extra" "master" # stable
update_project "llvm/tools/lld" "master" # release_[latest_version]
update_project "llvm/tools/lldb" "master" # release_[latest_version]
else
update_project "llvm/" "${release_branch:?}"
update_project "llvm/tools/clang" "${release_branch:?}"
update_project "llvm/projects/compiler-rt" "${release_branch:?}"
update_project "llvm/tools/clang/tools/extra" "${release_branch:?}"
update_project "llvm/tools/lld" "${release_branch:?}"
update_project "llvm/tools/lldb" "${release_branch:?}"
fi
install_llvm
)
}
main "$@"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment