128 lines
4.7 KiB
Bash
Executable File
128 lines
4.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
MASON_NAME=clang
|
|
MASON_VERSION=3.8.0
|
|
MASON_LIB_FILE=bin/clang
|
|
|
|
. ${MASON_DIR}/mason.sh
|
|
|
|
|
|
# options
|
|
ENABLE_LLDB=false
|
|
|
|
function curl_get() {
|
|
if [ ! -f $(basename ${1}) ] ; then
|
|
mason_step "Downloading $1 to $(pwd)/$(basename ${1})"
|
|
curl --retry 3 -f -L -O "$1"
|
|
else
|
|
echo "already downloaded $1 to $(pwd)/$(basename ${1})"
|
|
fi
|
|
}
|
|
|
|
function setup_release() {
|
|
LLVM_RELEASE=$1
|
|
BUILD_PATH=$2
|
|
curl_get "http://llvm.org/releases/${LLVM_RELEASE}/llvm-${LLVM_RELEASE}.src.tar.xz"
|
|
curl_get "http://llvm.org/releases/${LLVM_RELEASE}/cfe-${LLVM_RELEASE}.src.tar.xz"
|
|
curl_get "http://llvm.org/releases/${LLVM_RELEASE}/compiler-rt-${LLVM_RELEASE}.src.tar.xz"
|
|
curl_get "http://llvm.org/releases/${LLVM_RELEASE}/libcxx-${LLVM_RELEASE}.src.tar.xz"
|
|
curl_get "http://llvm.org/releases/${LLVM_RELEASE}/libcxxabi-${LLVM_RELEASE}.src.tar.xz"
|
|
curl_get "http://llvm.org/releases/${LLVM_RELEASE}/libunwind-${LLVM_RELEASE}.src.tar.xz"
|
|
curl_get "http://llvm.org/releases/${LLVM_RELEASE}/lld-${LLVM_RELEASE}.src.tar.xz"
|
|
if [[ ${ENABLE_LLDB} == true ]]; then
|
|
curl_get "http://llvm.org/releases/${LLVM_RELEASE}/lldb-${LLVM_RELEASE}.src.tar.xz"
|
|
fi
|
|
#curl_get "http://llvm.org/releases/${LLVM_RELEASE}/openmp-${LLVM_RELEASE}.src.tar.xz"
|
|
curl_get "http://llvm.org/releases/${LLVM_RELEASE}/clang-tools-extra-${LLVM_RELEASE}.src.tar.xz"
|
|
for i in $(ls *.xz); do
|
|
echo "unpacking $i"
|
|
tar xf $i;
|
|
done
|
|
mv llvm-${LLVM_RELEASE}.src/* ${BUILD_PATH}/
|
|
ls ${BUILD_PATH}/
|
|
mv cfe-${LLVM_RELEASE}.src ${BUILD_PATH}/tools/clang
|
|
mv compiler-rt-${LLVM_RELEASE}.src ${BUILD_PATH}/projects/compiler-rt
|
|
mv libcxx-${LLVM_RELEASE}.src ${BUILD_PATH}/projects/libcxx
|
|
mv libcxxabi-${LLVM_RELEASE}.src ${BUILD_PATH}/projects/libcxxabi
|
|
mv libunwind-${LLVM_RELEASE}.src ${BUILD_PATH}/projects/libunwind
|
|
mv lld-${LLVM_RELEASE}.src ${BUILD_PATH}/tools/lld
|
|
if [[ ${ENABLE_LLDB} == true ]]; then
|
|
mv lldb-${LLVM_RELEASE}.src ${BUILD_PATH}/tools/lldb
|
|
fi
|
|
#mv openmp-${LLVM_RELEASE}.src ${BUILD_PATH}/projects/openmp
|
|
mv clang-tools-extra-${LLVM_RELEASE}.src ${BUILD_PATH}/tools/clang/tools/extra
|
|
cd ../
|
|
}
|
|
|
|
|
|
function mason_load_source {
|
|
mkdir -p "${MASON_ROOT}/.cache"
|
|
cd "${MASON_ROOT}/.cache"
|
|
export MASON_BUILD_PATH=${MASON_ROOT}/.build/llvm-${MASON_VERSION}
|
|
if [[ -d ${MASON_BUILD_PATH}/ ]]; then
|
|
rm -rf ${MASON_BUILD_PATH}/
|
|
fi
|
|
mkdir -p ${MASON_BUILD_PATH}/
|
|
setup_release ${MASON_VERSION} ${MASON_BUILD_PATH}
|
|
}
|
|
|
|
function mason_prepare_compile {
|
|
${MASON_DIR}/mason install ccache 3.2.4
|
|
MASON_CCACHE=$(${MASON_DIR}/mason prefix ccache 3.2.4)
|
|
${MASON_DIR}/mason install clang 3.8.0
|
|
MASON_CLANG=$(${MASON_DIR}/mason prefix clang 3.8.0)
|
|
${MASON_DIR}/mason install cmake 3.5.2
|
|
MASON_CMAKE=$(${MASON_DIR}/mason prefix cmake 3.5.2)
|
|
${MASON_DIR}/mason install ninja 1.7.1
|
|
MASON_NINJA=$(${MASON_DIR}/mason prefix ninja 1.7.1)
|
|
}
|
|
|
|
function mason_compile {
|
|
export CXX="${MASON_CLANG}/bin/clang++"
|
|
export CC="${MASON_CLANG}/bin/clang"
|
|
mkdir -p ./build
|
|
cd ./build
|
|
CMAKE_EXTRA_ARGS=""
|
|
## TODO: CLANG_DEFAULT_CXX_STDLIB and CLANG_APPEND_VC_REV not available in clang-3.8 cmake files
|
|
if [[ $(uname -s) == 'Darwin' ]]; then
|
|
CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -DCLANG_DEFAULT_CXX_STDLIB=libc++"
|
|
CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -DC_INCLUDE_DIRS=:/usr/include:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/:/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/"
|
|
CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -DDEFAULT_SYSROOT=/"
|
|
CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -DCMAKE_OSX_DEPLOYMENT_TARGET=10.11"
|
|
fi
|
|
CXXFLAGS="${CXXFLAGS//-mmacosx-version-min=10.8}"
|
|
${MASON_CMAKE}/bin/cmake ../ -G Ninja -DCMAKE_INSTALL_PREFIX=${MASON_PREFIX} \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DCMAKE_CXX_COMPILER_LAUNCHER="${MASON_CCACHE}/bin/ccache" \
|
|
-DCMAKE_CXX_COMPILER="$CXX" \
|
|
-DCMAKE_C_COMPILER="$CC" \
|
|
-DLLVM_ENABLE_ASSERTIONS=OFF \
|
|
-DCLANG_VENDOR=mapbox/mason \
|
|
-DCLANG_REPOSITORY_STRING=https://github.com/mapbox/mason \
|
|
-DCLANG_VENDOR_UTI=org.mapbox.clang \
|
|
-DCMAKE_EXE_LINKER_FLAGS="${LDFLAGS}" \
|
|
-DCMAKE_CXX_FLAGS="${CXXFLAGS}" \
|
|
-DLLVM_OPTIMIZED_TABLEGEN=ON \
|
|
-DCMAKE_MAKE_PROGRAM=${MASON_NINJA}/bin/ninja \
|
|
${CMAKE_EXTRA_ARGS}
|
|
${MASON_NINJA}/bin/ninja -j${MASON_CONCURRENCY} -k5
|
|
${MASON_NINJA}/bin/ninja install -k5
|
|
cd ${MASON_PREFIX}/bin/
|
|
rm -f "clang++-3.8"
|
|
ln -s "clang++" "clang++-3.8"
|
|
}
|
|
|
|
function mason_cflags {
|
|
:
|
|
}
|
|
|
|
function mason_ldflags {
|
|
:
|
|
}
|
|
|
|
function mason_static_libs {
|
|
:
|
|
}
|
|
|
|
mason_run "$@"
|