build a proper c++-enabled musl toolchain with musl-cross-make
This commit is contained in:
parent
3729e48bf2
commit
aecb32ce6e
@ -4,6 +4,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
g++ \
|
||||
make \
|
||||
file \
|
||||
wget \
|
||||
curl \
|
||||
ca-certificates \
|
||||
python2.7 \
|
||||
@ -18,19 +19,17 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
|
||||
WORKDIR /build/
|
||||
|
||||
COPY scripts/musl.sh /build/
|
||||
COPY scripts/musl-toolchain.sh /build/
|
||||
# We need to mitigate rust-lang/rust#34978 when compiling musl itself as well
|
||||
RUN CC=gcc \
|
||||
CFLAGS="-Wa,-mrelax-relocations=no" \
|
||||
CXX=g++ \
|
||||
CXXFLAGS="-Wa,-mrelax-relocations=no" \
|
||||
bash musl.sh x86_64 && rm -rf /build
|
||||
# TODO: Check what this issue is and if we can ignore it
|
||||
|
||||
RUN bash musl-toolchain.sh x86_64-linux-musl && rm -rf build
|
||||
|
||||
COPY scripts/sccache.sh /scripts/
|
||||
RUN sh /scripts/sccache.sh
|
||||
|
||||
ENV RUST_CONFIGURE_ARGS \
|
||||
--musl-root-x86_64=/musl-x86_64 \
|
||||
--musl-root-x86_64=/usr/local/x86_64-linux-musl \
|
||||
--enable-extended \
|
||||
--disable-docs
|
||||
|
||||
@ -39,9 +38,14 @@ ENV RUST_CONFIGURE_ARGS \
|
||||
# way to produce "super compatible" binaries.
|
||||
#
|
||||
# See: https://github.com/rust-lang/rust/issues/34978
|
||||
ENV CFLAGS_x86_64_unknown_linux_musl=-Wa,-mrelax-relocations=no
|
||||
#ENV CFLAGS_x86_64_unknown_linux_musl=-Wa,-mrelax-relocations=no
|
||||
|
||||
ENV HOSTS=x86_64-unknown-linux-musl
|
||||
ENV HOSTS=x86_64-unknown-linux-musl \
|
||||
CC_x86_64_unknown_linux_musl=x86_64-linux-musl-gcc \
|
||||
CXX_x86_64_unknown_linux_musl=x86_64-linux-musl-g++
|
||||
|
||||
# CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABIHF_LINKER=musl-gcc \
|
||||
# CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABIHF_RUNNER="qemu-arm -L /musl-arm"
|
||||
|
||||
ENV RUSTFLAGS="-C target-feature=-crt-static"
|
||||
|
||||
|
66
src/ci/docker/scripts/musl-toolchain.sh
Normal file
66
src/ci/docker/scripts/musl-toolchain.sh
Normal file
@ -0,0 +1,66 @@
|
||||
# Copyright 2016 The Rust Project Developers. See the COPYRIGHT
|
||||
# file at the top-level directory of this distribution and at
|
||||
# http://rust-lang.org/COPYRIGHT.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
# option. This file may not be copied, modified, or distributed
|
||||
# except according to those terms.
|
||||
|
||||
set -ex
|
||||
|
||||
hide_output() {
|
||||
set +x
|
||||
on_err="
|
||||
echo ERROR: An error was encountered with the build.
|
||||
cat /tmp/build.log
|
||||
exit 1
|
||||
"
|
||||
trap "$on_err" ERR
|
||||
bash -c "while true; do sleep 30; echo \$(date) - building ...; done" &
|
||||
PING_LOOP_PID=$!
|
||||
$@ &> /tmp/build.log
|
||||
trap - ERR
|
||||
kill $PING_LOOP_PID
|
||||
rm /tmp/build.log
|
||||
set -x
|
||||
}
|
||||
|
||||
TARGET=$1
|
||||
OUTPUT=/usr/local
|
||||
shift
|
||||
|
||||
git clone https://github.com/richfelker/musl-cross-make -b v0.9.7
|
||||
cd musl-cross-make
|
||||
|
||||
hide_output make -j$(nproc) TARGET=$TARGET
|
||||
hide_output make install TARGET=$TARGET OUTPUT=$OUTPUT
|
||||
|
||||
cd ..
|
||||
|
||||
export CC=$TARGET-gcc
|
||||
export CXX=$TARGET-g++
|
||||
|
||||
LLVM=60
|
||||
|
||||
# may have been downloaded in a previous run
|
||||
if [ ! -d libunwind-release_$LLVM ]; then
|
||||
curl -L https://github.com/llvm-mirror/llvm/archive/release_$LLVM.tar.gz | tar xzf -
|
||||
curl -L https://github.com/llvm-mirror/libunwind/archive/release_$LLVM.tar.gz | tar xzf -
|
||||
fi
|
||||
|
||||
mkdir libunwind-build
|
||||
cd libunwind-build
|
||||
cmake ../libunwind-release_$LLVM \
|
||||
-DLLVM_PATH=/build/llvm-release_$LLVM \
|
||||
-DLIBUNWIND_ENABLE_SHARED=0 \
|
||||
-DCMAKE_C_COMPILER=$CC \
|
||||
-DCMAKE_CXX_COMPILER=$CXX \
|
||||
-DCMAKE_C_FLAGS="$CFLAGS" \
|
||||
-DCMAKE_CXX_FLAGS="$CXXFLAGS"
|
||||
|
||||
hide_output make -j$(nproc)
|
||||
cp lib/libunwind.a $OUTPUT/$TARGET/lib
|
||||
cd ../ && rm -rf libunwind-build
|
||||
|
Loading…
x
Reference in New Issue
Block a user