Skip to content

Commit

Permalink
Change the build script to MUSL (#85)
Browse files Browse the repository at this point in the history
* Add the MUSL build script

* Install ninja

* Install the Rust target for MUSL

* Install musl-gcc

* Fix the LLVM output path

* Fix the LLVM unit test path and target

* Re-enable unit tests building

* Remove the unit tests CI step

Co-authored-by: Alex Z <a.zarudnyy@matterlabs.dev>
  • Loading branch information
hedgar2017 and Alex Z committed Jul 14, 2022
1 parent 6a0dec7 commit 8b5e5ec
Show file tree
Hide file tree
Showing 4 changed files with 275 additions and 117 deletions.
7 changes: 6 additions & 1 deletion .github/workflows/compiler-benchmarks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,11 @@ jobs:
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PK_BOT }}

- name: Preparing workspace. Installing additional packages.
run: |
${DOCKER_CMD} sh -c 'apt install -y ninja-build musl musl-tools'
${DOCKER_CMD} sh -c 'rustup target add x86_64-unknown-linux-musl'
- name: Preparing workspace. Setting docker ssh key.
run: |
${DOCKER_CMD} sh -c 'mkdir -pv /root/.ssh'
Expand All @@ -133,7 +138,7 @@ jobs:
git config --global url."https://${{ secrets.COMPILER_TESTER_ACCESS_TOKEN }}:x-oauth-basic@github.com/".insteadOf ssh://git@github.com/ && \
git config --global url."https://${{ secrets.COMPILER_TESTER_ACCESS_TOKEN }}:x-oauth-basic@github.com/".insteadOf https://github.com/ && \
export LLVM_SYS_130_PREFIX=${HOME}/opt/llvm-${{ env.LLVM_BUILD_TYPE }}/ && \
cargo run --release --bin compiler-tester -- --filter=${{ env.LLVM_BENCHMARK_FILTER }} --domain=${{ env.LLVM_BENCHMARK_DOMAIN }} --benchmark=candidate.json'
cargo run --release --target x86_64-unknown-linux-musl --bin compiler-tester -- --filter=${{ env.LLVM_BENCHMARK_FILTER }} --domain=${{ env.LLVM_BENCHMARK_DOMAIN }} --benchmark=candidate.json'
- uses: actions/upload-artifact@v3
with:
Expand Down
13 changes: 6 additions & 7 deletions .github/workflows/compiler-integration-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,11 @@ jobs:
env:
SSH_PRIVATE_KEY: ${{secrets.SSH_PK_BOT}}

- name: Preparing workspace. Installing additional packages.
run: |
${DOCKER_CMD} sh -c 'apt install -y ninja-build musl musl-tools'
${DOCKER_CMD} sh -c 'rustup target add x86_64-unknown-linux-musl'
- name: Preparing workspace. Setting docker ssh key.
run: |
${DOCKER_CMD} sh -c 'mkdir -pv /root/.ssh'
Expand All @@ -94,12 +99,6 @@ jobs:
${DOCKER_CMD} sh -c 'cd compiler-llvm && \
./build.sh ${{ env.LLVM_BUILD_TYPE }}'
- name: Testing. Running regression LLVM tests.
run: |
${DOCKER_CMD} sh -c '
cd compiler-llvm/build-${{ env.LLVM_BUILD_TYPE }} && \
make -j24 check-llvm-codegen-syncvm'
- name: Testing. Building and running compiler tester.
id: compiler_tester_run
run: |
Expand All @@ -108,7 +107,7 @@ jobs:
git config --global url."https://${{ secrets.COMPILER_TESTER_ACCESS_TOKEN }}:x-oauth-basic@github.com/".insteadOf ssh://git@github.com/ && \
git config --global url."https://${{ secrets.COMPILER_TESTER_ACCESS_TOKEN }}:x-oauth-basic@github.com/".insteadOf https://github.com/ && \
export LLVM_SYS_130_PREFIX=${HOME}/opt/llvm-${{ env.LLVM_BUILD_TYPE }}/ && \
cargo run --verbose --release --bin compiler-tester'
cargo run --release --target x86_64-unknown-linux-musl --bin compiler-tester'
compiler_exit_code=$?
if [ "${compiler_exit_code}" -gt "1" ]; then
echo "RUN_SEGFAULT_STEP=true" >> $GITHUB_ENV
Expand Down
258 changes: 149 additions & 109 deletions build.sh
Original file line number Diff line number Diff line change
@@ -1,111 +1,151 @@
#!/usr/bin/env bash

set -Cex

# Target build: 'debug' | 'release'
case "${1}" in
debug)
export DIRECTORY_SUFFIX='debug'
export BUILD_TYPE='Debug'
;;
release)
export DIRECTORY_SUFFIX='release'
export BUILD_TYPE='Release'
;;
*)
export DIRECTORY_SUFFIX='release'
export BUILD_TYPE='Release'
;;
esac

if [[ "$OSTYPE" == "darwin"* ]]; then
if [[ -z ${CI_RUNNING+x} ]]; then
brew update
brew install cmake
fi

cmake \
-S 'llvm' \
-B "build-${DIRECTORY_SUFFIX}/" \
-G 'Unix Makefiles' \
-DCMAKE_INSTALL_PREFIX="${HOME}/opt/llvm-${DIRECTORY_SUFFIX}/" \
-DCMAKE_BUILD_TYPE="${BUILD_TYPE}" \
-DLLVM_TARGETS_TO_BUILD='X86' \
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='SyncVM' \
-DLLVM_OPTIMIZED_TABLEGEN='On' \
-DLLVM_BUILD_DOCS='Off' \
-DLLVM_INCLUDE_DOCS='Off' \
-DLLVM_ENABLE_ASSERTIONS='On' \
-DLLVM_ENABLE_DOXYGEN='Off' \
-DLLVM_ENABLE_SPHINX='Off' \
-DLLVM_ENABLE_OCAMLDOC='Off' \
-DLLVM_ENABLE_BINDINGS='Off'

cd "build-${DIRECTORY_SUFFIX}/"
make -j "$(sysctl -n hw.logicalcpu)"
elif [[ -f '/etc/arch-release' ]]; then
if [[ -z ${CI_RUNNING+x} ]]; then
sudo pacman --sync --refresh --sysupgrade --noconfirm \
cmake \
clang \
lld
fi

cmake \
-S 'llvm' \
-B "build-${DIRECTORY_SUFFIX}/" \
-G 'Unix Makefiles' \
-DCMAKE_INSTALL_PREFIX="${HOME}/opt/llvm-${DIRECTORY_SUFFIX}/" \
-DCMAKE_BUILD_TYPE="${BUILD_TYPE}" \
-DCMAKE_C_COMPILER='clang' \
-DCMAKE_CXX_COMPILER='clang++' \
-DLLVM_TARGETS_TO_BUILD='X86' \
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='SyncVM' \
-DLLVM_OPTIMIZED_TABLEGEN='On' \
-DLLVM_USE_LINKER='lld' \
-DLLVM_BUILD_DOCS='Off' \
-DLLVM_INCLUDE_DOCS='Off' \
-DLLVM_ENABLE_ASSERTIONS='On' \
-DLLVM_ENABLE_DOXYGEN='Off' \
-DLLVM_ENABLE_SPHINX='Off' \
-DLLVM_ENABLE_OCAMLDOC='Off' \
-DLLVM_ENABLE_BINDINGS='Off'

cd "build-${DIRECTORY_SUFFIX}/"
make -j "$(nproc)"
elif [[ "$OSTYPE" == "linux-gnu" ]]; then
if [[ -z ${CI_RUNNING+x} ]]; then
sudo apt --yes update
sudo apt --yes install \
cmake \
clang-11 \
lld-11
export LLVM_VERSION=11
fi

cmake \
-S 'llvm' \
-B "build-${DIRECTORY_SUFFIX}/" \
-G 'Unix Makefiles' \
-DCMAKE_INSTALL_PREFIX="${HOME}/opt/llvm-${DIRECTORY_SUFFIX}/" \
-DCMAKE_BUILD_TYPE="${BUILD_TYPE}" \
-DCMAKE_C_COMPILER="clang-${LLVM_VERSION}" \
-DCMAKE_CXX_COMPILER="clang++-${LLVM_VERSION}" \
-DLLVM_TARGETS_TO_BUILD='X86' \
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='SyncVM' \
-DLLVM_OPTIMIZED_TABLEGEN='On' \
-DLLVM_USE_LINKER="lld-${LLVM_VERSION}" \
-DLLVM_BUILD_DOCS='Off' \
-DLLVM_INCLUDE_DOCS='Off' \
-DLLVM_ENABLE_ASSERTIONS='On' \
-DLLVM_ENABLE_DOXYGEN='Off' \
-DLLVM_ENABLE_SPHINX='Off' \
-DLLVM_ENABLE_OCAMLDOC='Off' \
-DLLVM_ENABLE_BINDINGS='Off' \
-DPython3_EXECUTABLE=`which python3`

cd "build-${DIRECTORY_SUFFIX}/"
make -j "$(nproc)"
fi

sudo make install
set -ex

ROOT_DIR="${PWD}"

MUSL_NAME='musl-1.2.3'
MUSL_BUILD="${ROOT_DIR}/${MUSL_NAME}/build/"
MUSL_INSTALL="${HOME}/opt/musl/"

CRT_BUILD="${ROOT_DIR}/build-crt/"
CRT_INSTALL="${ROOT_DIR}/opt/crt-musl/"

HOST_BUILD="${ROOT_DIR}/build-host/"
HOST_INSTALL="${HOME}/opt/llvm-musl-host/"

TARGET_BUILD="${ROOT_DIR}/build-target/"
TARGET_INSTALL="${HOME}/opt/llvm-release/"



wget "https://git.musl-libc.org/cgit/musl/snapshot/${MUSL_NAME}.tar.gz"
tar -xvzf "${MUSL_NAME}.tar.gz"

mkdir -pv "${MUSL_BUILD}"
cd "${MUSL_BUILD}"
../configure \
--prefix="${MUSL_INSTALL}" \
--syslibdir="${MUSL_INSTALL}/lib/" \
--enable-wrapper='clang'
cd "${MUSL_BUILD}"
make -j "$(nproc)"
make install
cd "${ROOT_DIR}"

mkdir -pv "${MUSL_INSTALL}/include/asm"
types_h="${MUSL_INSTALL}/include/asm/types.h"
cp -rfv '/usr/include/linux' "${MUSL_INSTALL}/include/"
cp -rfv /usr/include/asm-generic/* "${MUSL_INSTALL}/include/asm/"
sed -i 's/asm-generic/asm/' "${types_h}"



cmake './llvm' \
-B "${CRT_BUILD}" \
-G 'Ninja' \
-DCMAKE_C_COMPILER='clang' \
-DCMAKE_CXX_COMPILER='clang++' \
-DCMAKE_INSTALL_PREFIX="${CRT_INSTALL}" \
-DCMAKE_BUILD_TYPE='Release' \
-DLLVM_ENABLE_PROJECTS='compiler-rt' \
-DLLVM_TARGETS_TO_BUILD='X86' \
-DLLVM_DEFAULT_TARGET_TRIPLE='x86_64-pc-linux-musl' \
-DLLVM_BUILD_DOCS='Off' \
-DLLVM_BUILD_TESTS='Off' \
-DLLVM_INCLUDE_DOCS='Off' \
-DLLVM_INCLUDE_TESTS='Off' \
-DLLVM_ENABLE_ASSERTIONS='Off' \
-DLLVM_ENABLE_DOXYGEN='Off' \
-DLLVM_ENABLE_SPHINX='Off' \
-DLLVM_ENABLE_OCAMLDOC='Off' \
-DLLVM_ENABLE_BINDINGS='Off' \
-DLLVM_ENABLE_TERMINFO='Off' \
-DCOMPILER_RT_DEFAULT_TARGET_ARCH='x86_64' \
-DCOMPILER_RT_BUILD_CRT='On' \
-DCOMPILER_RT_BUILD_SANITIZERS='Off' \
-DCOMPILER_RT_BUILD_XRAY='Off' \
-DCOMPILER_RT_BUILD_LIBFUZZER='Off' \
-DCOMPILER_RT_BUILD_PROFILE='Off' \
-DCOMPILER_RT_BUILD_MEMPROF='Off' \
-DCOMPILER_RT_BUILD_ORC='Off' \
-DCOMPILER_RT_BUILD_GWP_ASAN='Off'
ninja -C "${CRT_BUILD}" install-crt



cmake './llvm' \
-B "${HOST_BUILD}" \
-G 'Ninja' \
-DDEFAULT_SYSROOT="${MUSL_INSTALL}" \
-DBUILD_SHARED_LIBS='Off' \
-DCMAKE_C_COMPILER='clang' \
-DCMAKE_CXX_COMPILER='clang++' \
-DCMAKE_INSTALL_PREFIX="${HOST_INSTALL}" \
-DCMAKE_BUILD_TYPE='Release' \
-DCLANG_DEFAULT_CXX_STDLIB='libc++' \
-DCLANG_DEFAULT_RTLIB='compiler-rt' \
-DLLVM_DEFAULT_TARGET_TRIPLE='x86_64-pc-linux-musl' \
-DLLVM_TARGETS_TO_BUILD='X86' \
-DLLVM_BUILD_DOCS='Off' \
-DLLVM_BUILD_TESTS='Off' \
-DLLVM_INCLUDE_DOCS='Off' \
-DLLVM_INCLUDE_TESTS='Off' \
-DLLVM_ENABLE_PROJECTS='clang;lld' \
-DLLVM_ENABLE_RUNTIMES='compiler-rt;libcxx;libcxxabi;libunwind' \
-DLLVM_ENABLE_ASSERTIONS='Off' \
-DLLVM_ENABLE_DOXYGEN='Off' \
-DLLVM_ENABLE_SPHINX='Off' \
-DLLVM_ENABLE_OCAMLDOC='Off' \
-DLLVM_ENABLE_BINDINGS='Off' \
-DLLVM_ENABLE_TERMINFO='Off' \
-DLIBCXX_CXX_ABI='libcxxabi' \
-DLIBCXX_HAS_MUSL_LIBC='On' \
-DLIBCXX_ENABLE_SHARED='Off' \
-DLIBCXX_ENABLE_STATIC='On' \
-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY='On' \
-DLIBCXXABI_ENABLE_SHARED='Off' \
-DLIBCXXABI_ENABLE_STATIC='On' \
-DLIBCXXABI_ENABLE_STATIC_UNWINDER='On' \
-DLIBCXXABI_USE_LLVM_UNWINDER='On' \
-DLIBCXXABI_USE_COMPILER_RT='On' \
-DLIBUNWIND_ENABLE_STATIC='On' \
-DLIBUNWIND_ENABLE_SHARED='Off' \
-DCOMPILER_RT_BUILD_CRT='On' \
-DCOMPILER_RT_BUILD_SANITIZERS='Off' \
-DCOMPILER_RT_BUILD_XRAY='Off' \
-DCOMPILER_RT_BUILD_LIBFUZZER='Off' \
-DCOMPILER_RT_BUILD_PROFILE='Off' \
-DCOMPILER_RT_BUILD_MEMPROF='Off' \
-DCOMPILER_RT_BUILD_ORC='Off' \
-DCOMPILER_RT_DEFAULT_TARGET_ARCH='x86_64' \
-DCOMPILER_RT_DEFAULT_TARGET_ONLY='On'
cp -rfv "${CRT_INSTALL}/lib/"* "${HOST_BUILD}/lib/"
ninja -C "${HOST_BUILD}" install



cmake './llvm' \
-B "${TARGET_BUILD}" \
-G 'Ninja' \
-DBUILD_SHARED_LIBS='Off' \
-DCMAKE_C_COMPILER="${HOST_INSTALL}/bin/clang" \
-DCMAKE_CXX_COMPILER="${HOST_INSTALL}/bin/clang++" \
-DCMAKE_INSTALL_PREFIX="${TARGET_INSTALL}" \
-DCMAKE_BUILD_TYPE='Release' \
-DCMAKE_FIND_LIBRARY_SUFFIXES=".a" \
-DCMAKE_EXE_LINKER_FLAGS='-fuse-ld=lld -static' \
-DLLVM_TARGETS_TO_BUILD='SyncVM' \
-DLLVM_BUILD_DOCS='Off' \
-DLLVM_BUILD_TESTS='Off' \
-DLLVM_INCLUDE_DOCS='Off' \
-DLLVM_INCLUDE_TESTS='Off' \
-DLLVM_ENABLE_PROJECTS='llvm' \
-DLLVM_ENABLE_ASSERTIONS='Off' \
-DLLVM_ENABLE_DOXYGEN='Off' \
-DLLVM_ENABLE_SPHINX='Off' \
-DLLVM_ENABLE_OCAMLDOC='Off' \
-DLLVM_ENABLE_BINDINGS='Off' \
-DLLVM_ENABLE_TERMINFO='Off' \
-DLLVM_ENABLE_PIC='Off'
ninja -C "${TARGET_BUILD}" install

0 comments on commit 8b5e5ec

Please sign in to comment.