Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change the build script to MUSL #85

Merged
merged 10 commits into from
Jul 14, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading