[build] Add new build_sysroot.sh and peru.yaml
Update the build_sysroot to build an LLVM 11 sysroot, dealing with LLVM's change in structure. Also re-add peru.yaml for getting a pre-built sysroot via peru. See: https://github.com/buildinspace/peru
This commit is contained in:
7
peru.yaml
Normal file
7
peru.yaml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
imports:
|
||||||
|
sysroot: sysroot/
|
||||||
|
|
||||||
|
curl module sysroot:
|
||||||
|
url: https://f000.backblazeb2.com/file/jsix-os/sysroot-llvm-11.tar.gz
|
||||||
|
unpack: tar
|
||||||
|
sha1: 7dffa388bdb2e20e1b0eb73600024e0c07d95abd
|
||||||
@@ -1,131 +1,126 @@
|
|||||||
#!/usr/bin/env bash
|
#!/bin/bash
|
||||||
|
|
||||||
TARGET="x86_64-elf"
|
set -o errexit
|
||||||
LLVM_BRANCH="release_80"
|
set -o errtrace
|
||||||
|
set -o pipefail
|
||||||
|
set -o nounset
|
||||||
|
|
||||||
TOOLS="clang lld" # lld libunwind libcxxabi libcxx"
|
function errmsg () {
|
||||||
PROJECTS="compiler-rt libcxxabi libcxx libunwind"
|
echo "Error: $(caller)"
|
||||||
#RUNTIMES="compiler-rt libcxxabi libcxx libunwind"
|
echo "Working directory not cleaned up!"
|
||||||
|
}
|
||||||
|
|
||||||
set -e
|
trap errmsg ERR
|
||||||
|
|
||||||
README=$(realpath "$(dirname $0)/readme_for_prebuilt_sysroots.md")
|
LLVM_VERSION=11
|
||||||
SYSROOT=$(realpath "$(dirname $0)/../sysroot")
|
J6_TOOLCHAINS="${J6_TOOLCHAINS:-$(realpath ~/.local/lib/jsix)}"
|
||||||
WORK=$(realpath "$(dirname $0)/sysroot")
|
CHAIN_NAME="llvm-${LLVM_VERSION}"
|
||||||
mkdir -p "${SYSROOT}"
|
LLVM_BRANCH="release/${LLVM_VERSION}.x"
|
||||||
mkdir -p "${WORK}"
|
|
||||||
|
|
||||||
export CC=clang
|
SYSROOT="${J6_TOOLCHAINS}/sysroots/${CHAIN_NAME}"
|
||||||
export CXX=clang++
|
|
||||||
|
|
||||||
if [[ ! -d "${WORK}/llvm" ]]; then
|
ROOT=$(realpath ${1:-$(mktemp -d "sysroot_build.XXX")})
|
||||||
echo "Downloading LLVM..."
|
OUT="${ROOT}/sysroot"
|
||||||
git clone -q \
|
echo "Working in ${ROOT}"
|
||||||
|
|
||||||
|
if [ ! -d "${ROOT}/llvm-project" ]; then
|
||||||
|
echo "* Downloading LLVM ${LLVM_VERSION}"
|
||||||
|
|
||||||
|
git clone -q --depth 1 \
|
||||||
--branch "${LLVM_BRANCH}" \
|
--branch "${LLVM_BRANCH}" \
|
||||||
--depth 1 \
|
"https://github.com/llvm/llvm-project" \
|
||||||
"https://git.llvm.org/git/llvm.git" "${WORK}/llvm"
|
"${ROOT}/llvm-project"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for tool in ${TOOLS}; do
|
if [ -d "${OUT}" ]; then
|
||||||
if [[ ! -d "${WORK}/llvm/tools/${tool}" ]]; then
|
rm -rf "${OUT}"
|
||||||
echo "Downloading ${tool}..."
|
|
||||||
git clone -q \
|
|
||||||
--branch "${LLVM_BRANCH}" \
|
|
||||||
--depth 1 \
|
|
||||||
"https://git.llvm.org/git/${tool}.git" "${WORK}/llvm/tools/${tool}"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [[ ! -d "${WORK}/llvm/tools/clang/tools/extra" ]]; then
|
|
||||||
echo "Downloading clang-tools-extra..."
|
|
||||||
git clone -q \
|
|
||||||
--branch "${LLVM_BRANCH}" \
|
|
||||||
--depth 1 \
|
|
||||||
"https://git.llvm.org/git/clang-tools-extra.git" "${WORK}/llvm/tools/clang/tools/extra"
|
|
||||||
fi
|
fi
|
||||||
|
mkdir -p "${OUT}"
|
||||||
|
|
||||||
for proj in ${PROJECTS}; do
|
## Stage1: build an LLVM toolchain that doesn't rely on the host libraries,
|
||||||
if [[ ! -d "${WORK}/llvm/projects/${proj}" ]]; then
|
## compiler, runtime, etc.
|
||||||
echo "Downloading ${proj}..."
|
|
||||||
git clone -q \
|
|
||||||
--branch "${LLVM_BRANCH}" \
|
|
||||||
--depth 1 \
|
|
||||||
"https://git.llvm.org/git/${proj}.git" "${WORK}/llvm/projects/${proj}"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
for proj in ${RUNTIMES}; do
|
echo "* Configuring stage1"
|
||||||
if [[ ! -d "${WORK}/llvm/runtimes/${proj}" ]]; then
|
|
||||||
echo "Downloading ${proj}..."
|
|
||||||
git clone -q \
|
|
||||||
--branch "${LLVM_BRANCH}" \
|
|
||||||
--depth 1 \
|
|
||||||
"https://git.llvm.org/git/${proj}.git" "${WORK}/llvm/runtime/${proj}"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
mkdir -p "${WORK}/build/llvm"
|
|
||||||
pushd "${WORK}/build/llvm"
|
|
||||||
|
|
||||||
echo "Configuring LLVM..."
|
|
||||||
|
|
||||||
|
mkdir -p "${ROOT}/stage1"
|
||||||
cmake -G Ninja \
|
cmake -G Ninja \
|
||||||
|
-S "${ROOT}/llvm-project/llvm" \
|
||||||
|
-B "${ROOT}/stage1" \
|
||||||
-DCLANG_DEFAULT_RTLIB=compiler-rt \
|
-DCLANG_DEFAULT_RTLIB=compiler-rt \
|
||||||
-DCLANG_DEFAULT_STD_C=c11 \
|
|
||||||
-DCLANG_DEFAULT_STD_CXX=cxx14 \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
-DCMAKE_C_COMPILER="clang" \
|
-DCMAKE_C_COMPILER="clang" \
|
||||||
|
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||||
-DCMAKE_CXX_COMPILER="clang++" \
|
-DCMAKE_CXX_COMPILER="clang++" \
|
||||||
-DCMAKE_CXX_FLAGS="-Wno-unused-parameter -D_LIBCPP_HAS_NO_ALIGNED_ALLOCATION -D_LIBUNWIND_IS_BAREMETAL=1 -U_LIBUNWIND_SUPPORT_DWARF_UNWIND" \
|
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||||
-DCMAKE_INSTALL_PREFIX="${SYSROOT}" \
|
-DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=lld" \
|
||||||
-DCMAKE_MAKE_PROGRAM=`which ninja` \
|
|
||||||
-DDEFAULT_SYSROOT="${SYSROOT}" \
|
|
||||||
-DLIBCXX_CXX_ABI=libcxxabi \
|
|
||||||
-DLIBCXX_CXX_ABI_INCLUDE_PATHS="${WORK}/llvm/projects/libcxxabi/include" \
|
|
||||||
-DLIBCXX_CXX_ABI_LIBRARY_PATH=lib \
|
|
||||||
-DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=OFF \
|
|
||||||
-DLIBCXX_ENABLE_NEW_DELETE_DEFINITIONS=ON \
|
|
||||||
-DLIBCXX_ENABLE_SHARED=OFF \
|
|
||||||
-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON \
|
|
||||||
-DLIBCXX_ENABLE_THREADS=OFF \
|
|
||||||
-DLIBCXX_INCLUDE_BENCHMARKS=OFF \
|
|
||||||
-DLIBCXX_USE_COMPILER_RT=ON \
|
|
||||||
-DLIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS=OFF \
|
|
||||||
-DLIBCXXABI_ENABLE_SHARED=OFF \
|
|
||||||
-DLIBCXXABI_ENABLE_STATIC_UNWINDER=ON \
|
|
||||||
-DLIBCXXABI_ENABLE_THREADS=OFF \
|
|
||||||
-DLIBCXXABI_LIBCXX_PATH="${WORK}/llvm/projects/libcxx" \
|
|
||||||
-DLIBCXXABI_USE_COMPILER_RT=ON \
|
-DLIBCXXABI_USE_COMPILER_RT=ON \
|
||||||
-DLIBCXXABI_USE_LLVM_UNWINDER=ON \
|
-DLIBCXXABI_USE_LLVM_UNWINDER=ON \
|
||||||
-DLIBUNWIND_ENABLE_SHARED=OFF \
|
-DLIBCXX_CXX_ABI=libcxxabi \
|
||||||
-DLIBUNWIND_ENABLE_THREADS=OFF \
|
|
||||||
-DLIBUNWIND_USE_COMPILER_RT=ON \
|
-DLIBUNWIND_USE_COMPILER_RT=ON \
|
||||||
-DLLVM_CONFIG_PATH="${SYSROOT}/bin/llvm-config" \
|
-DLLVM_BUILD_TOOLS=OFF \
|
||||||
-DLLVM_DEFAULT_TARGET_TRIPLE="x86_64-unknown-elf" \
|
-DLLVM_ENABLE_BINDINGS=OFF \
|
||||||
-DLLVM_ENABLE_LIBCXX=ON \
|
-DLLVM_ENABLE_PROJECTS="clang;lld;libcxx;libcxxabi;libunwind;compiler-rt" \
|
||||||
-DLLVM_ENABLE_LLD=ON \
|
-DLLVM_INCLUDE_BENCHMARKS=OFF \
|
||||||
-DLLVM_ENABLE_PIC=OFF \
|
-DLLVM_INCLUDE_EXAMPLES=OFF \
|
||||||
-DLLVM_ENABLE_THREADS=OFF \
|
-DLLVM_INCLUDE_TESTS=OFF \
|
||||||
-DLLVM_INSTALL_BINUTILS_SYMLINKS=ON \
|
-DLLVM_INCLUDE_UTILS=OFF \
|
||||||
-DLLVM_TARGETS_TO_BUILD="X86" \
|
-DLLVM_TARGETS_TO_BUILD="X86" \
|
||||||
${WORK}/llvm > cmake_configure.log
|
-DLLVM_USE_LINKER="lld" \
|
||||||
|
2>&1 > "${ROOT}/configure_stage1.log"
|
||||||
|
|
||||||
# -DCMAKE_ASM_COMPILER=nasm \
|
echo "* Building stage1"
|
||||||
# -DCMAKE_LINKER="${SYSROOT}/bin/ld.lld" \
|
|
||||||
# -DCOMPILER_RT_ENABLE_LLD=ON \
|
|
||||||
# -DLIBCXX_ENABLE_LLD=ON \
|
|
||||||
# -DLIBCXX_ENABLE_STATIC_UNWINDER=ON \
|
|
||||||
# -DLIBCXXABI_ENABLE_LLD=ON \
|
|
||||||
# -DLIBUNWIND_ENABLE_LLD=ON \
|
|
||||||
# -DLLVM_ENABLE_PROJECTS="libcxx;libcxxabi;libunwind;compiler-rt" \
|
|
||||||
# -DCOMPILER_RT_BAREMETAL_BUILD=ON \
|
|
||||||
# -DLIBCXXABI_BAREMETAL=ON \
|
|
||||||
|
|
||||||
echo "Building LLVM..."
|
ninja -C "${ROOT}/stage1" -v > "${ROOT}/build_stage1.log"
|
||||||
ninja && ninja install
|
STAGE1="${ROOT}/stage1/bin"
|
||||||
ninja cxx cxxabi compiler-rt
|
|
||||||
ninja install-compiler-rt install-cxx install-cxxabi
|
|
||||||
popd
|
|
||||||
|
|
||||||
|
## Stage2: build the sysroot libraries with the stage1 toolchain
|
||||||
|
|
||||||
cp "${README}" "${SYSROOT}/README.md"
|
echo "* Configuring stage2"
|
||||||
|
|
||||||
|
mkdir -p "${ROOT}/stage2"
|
||||||
|
cmake -G Ninja \
|
||||||
|
-S "${ROOT}/llvm-project/llvm" \
|
||||||
|
-B "${ROOT}/stage2" \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DCMAKE_C_COMPILER="${STAGE1}/clang" \
|
||||||
|
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||||
|
-DCMAKE_CXX_COMPILER="${STAGE1}/clang++" \
|
||||||
|
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||||
|
-DCMAKE_INSTALL_PREFIX="${OUT}" \
|
||||||
|
-DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=${STAGE1}/ld.lld" \
|
||||||
|
-DLIBCXXABI_ENABLE_STATIC_UNWINDER=ON \
|
||||||
|
-DLIBCXXABI_USE_COMPILER_RT=ON \
|
||||||
|
-DLIBCXXABI_USE_LLVM_UNWINDER=ON \
|
||||||
|
-DLIBCXX_CXX_ABI=libcxxabi \
|
||||||
|
-DLIBCXX_INCLUDE_BENCHMARKS=OFF \
|
||||||
|
-DLIBUNWIND_USE_COMPILER_RT=ON \
|
||||||
|
-DLLVM_DEFAULT_TARGET_TRIPLE="x86_64-unknown-elf" \
|
||||||
|
-DLLVM_ENABLE_BINDINGS=OFF \
|
||||||
|
-DLLVM_ENABLE_LIBCXX=ON \
|
||||||
|
-DLLVM_ENABLE_PROJECTS="libcxx;libcxxabi;libunwind" \
|
||||||
|
-DLLVM_INCLUDE_BENCHMARKS=OFF \
|
||||||
|
-DLLVM_INCLUDE_EXAMPLES=OFF \
|
||||||
|
-DLLVM_INCLUDE_TESTS=OFF \
|
||||||
|
-DLLVM_INCLUDE_TOOLS=OFF \
|
||||||
|
-DLLVM_INCLUDE_UTILS=OFF \
|
||||||
|
-DLLVM_TARGETS_TO_BUILD="X86" \
|
||||||
|
-DLLVM_USE_LINKER="${STAGE1}/ld.lld" \
|
||||||
|
2>&1 > "${ROOT}/configure_stage2.log"
|
||||||
|
|
||||||
|
echo "* Building stage2"
|
||||||
|
|
||||||
|
ninja -C "${ROOT}/stage2" -v > "${ROOT}/build_stage2.log"
|
||||||
|
|
||||||
|
echo "* Installing stage2"
|
||||||
|
|
||||||
|
ninja -C "${ROOT}/stage2" -v install/strip > "${ROOT}/install_stage2.log"
|
||||||
|
|
||||||
|
echo "* Installing new sysroot"
|
||||||
|
|
||||||
|
rm -rf "${SYSROOT}"
|
||||||
|
mv "${OUT}" "${SYSROOT}"
|
||||||
|
|
||||||
|
echo "* Cleaning up"
|
||||||
|
trap - ERR
|
||||||
|
rm -rf "${ROOT}"
|
||||||
|
echo "Done"
|
||||||
|
|||||||
Reference in New Issue
Block a user