Last active
April 5, 2018 08:01
-
-
Save lilianmoraru/d13c4e73c0bef0994353591fdd278d0b to your computer and use it in GitHub Desktop.
Build locally your own optimized version of LLVM/Clang
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 | |
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