feat: glibc-gcc wrapper and specs

This commit is contained in:
Lance R. Vick 2024-10-09 23:53:44 -07:00
parent b253654485
commit 70d4422bc4
No known key found for this signature in database
GPG key ID: 8E47A1EC35A1551D
5 changed files with 55 additions and 43 deletions

View file

@ -15,8 +15,6 @@ FROM fetch AS build
COPY --from=stagex/busybox . /
COPY --from=stagex/musl . /
# RUN rm -rf /usr/include
COPY --from=stagex/binutils . /
COPY --from=stagex/bison . /
COPY --from=stagex/gawk . /
@ -28,8 +26,8 @@ COPY --from=stagex/make . /
COPY --from=stagex/python . /
RUN tar -xzf ${SRC_FILE}
WORKDIR glibc-${VERSION}
COPY --from=stagex/linux-headers /usr/include /usr/include/x86_64-linux-gnu
ENV _TRIPLE=x86_64-linux-gnu
COPY --from=stagex/linux-headers /usr/include /usr/include/${ARCH}-linux-gnu
ENV _TRIPLE=${ARCH}-linux-gnu
ENV _LIBDIR=/usr/lib/${_TRIPLE}
ENV _INCDIR=/usr/include/${_TRIPLE}
RUN --network=none <<-EOF
@ -64,16 +62,16 @@ RUN --network=none <<-EOF
set -eux
cd build
make DESTDIR=/rootfs install
mkdir -p /rootfs/usr/lib/
mv /rootfs/lib64/* /rootfs/usr/lib/
rmdir /rootfs/lib64
mv /rootfs/sbin/* /rootfs/usr/bin
mv /rootfs/lib64 /rootfs/usr/lib64-pre-move
rmdir /rootfs/sbin
# mkdir -p /rootfs/usr/bin /rootfs/usr/lib
# rm -rf /rootfs/lib
# ln -sf /usr/lib/ld-musl-${ARCH}.so.1 /rootfs/usr/bin/ldd
# mv -f /rootfs/usr/lib/libc.so /rootfs/usr/lib/ld-musl-${ARCH}.so.1
# ln -sf ld-musl-${ARCH}.so.1 /rootfs/usr/lib/libc.musl-${ARCH}.so.1
# ln -sf /usr/lib/ld-musl-${ARCH}.so.1 /rootfs/usr/lib/libc.so
ln -s ${ARCH}-linux-gnu/libc.so /rootfs/usr/lib/ld-gnu-${ARCH}.so.1
EOF
ADD glibc-gcc /rootfs/usr/bin/
ADD glibc-gcc.specs /rootfs/usr/lib/${ARCH}-linux-gnu/glibc-gcc.specs
RUN ls -Rlah /rootfs
FROM scratch AS package
COPY --from=stagex/filesystem . /

2
packages/glibc/glibc-gcc Executable file
View file

@ -0,0 +1,2 @@
#!/bin/sh
exec "${REALGCC:-x86_64-linux-musl-gcc}" "$@" -specs "/usr/lib/x86_64-linux-gnu/glibc-gcc.specs"

View file

@ -0,0 +1,32 @@
%rename cpp_options old_cpp_options
*cpp_options:
-nostdinc -isystem /usr/include/x86_64-linux-gnu -isystem include%s %(old_cpp_options)
*cc1:
%(cc1_cpu) -nostdinc -isystem /usr/include/x86_64-linux-gnu -isystem include%s
*link_libgcc:
-L/usr/lib/x86_64-linux-gnu -L .%s
*libgcc:
libgcc.a%s %:if-exists(libgcc_eh.a%s)
*startfile:
%{!shared: /usr/lib/x86_64-linux-gnu/Scrt1.o} /usr/lib/x86_64-linux-gnu/crti.o crtbeginS.o%s
*endfile:
crtendS.o%s /usr/lib/x86_64-linux-gnu/crtn.o
*link:
-dynamic-linker -nostdlib %{shared:-shared} %{static:-static} %{rdynamic:-export-dynamic}
*esp_link:
*esp_options:
*esp_cpp_options:

View file

@ -1,12 +1,11 @@
FROM scratch AS base
ARG VERSION=1.76.0
ARG VERSION=1.81.0
ENV SRC_SITE=https://static.rust-lang.org/dist
ENV SRC_HASH=9e5cff033a7f0d2266818982ad90e4d3e4ef8f8ee1715776c6e25073a136c021
ENV SRC_HASH=872448febdff32e50c3c90a7e15f9bb2db131d13c588fe9071b0ed88837ccfa7
FROM base AS fetch
COPY --from=stagex/busybox . /
ADD --checksum=sha256:${SRC_HASH} ${SRC_SITE}/rustc-${VERSION}-src.tar.gz .
#ADD rust rustc-${VERSION}-src
FROM fetch AS build
COPY --from=stagex/binutils . /
@ -23,27 +22,18 @@ COPY --from=stagex/gcc . /
COPY --from=stagex/libunwind . /
COPY --from=stagex/musl . /
COPY --from=stagex/rust . /
COPY --from=stagex/glibc . /
COPY --from=stagex/curl . /
COPY --from=stagex/ca-certificates . /
COPY --from=stagex/llvm . /
COPY --from=stagex/llvm16 . /
RUN mkdir -p $HOME/.cargo/registry/src/index.crates.io-6f17d22bba15001f/
#ADD no-default-static.patch .
ADD glibc.patch .
RUN tar -xzf rustc-${VERSION}-src.tar.gz
WORKDIR rustc-${VERSION}-src
ADD *.patch .
RUN <<EOF
set -eux
#PATCHES=no-default-static
PATCHES=glibc
PREFIX=/rust-${VERSION}/usr
tar -xzf rustc-${VERSION}-src.tar.gz
cd rustc-${VERSION}-src
[[ -z "$PATCHES" ]] || for name in ${PATCHES//,/ }; do
patch -p1 < ../${name}.patch
done
patch -p1 ../glibc.patch
./configure \
--build="x86_64-unknown-linux-musl" \
--host="x86_64-unknown-linux-musl" \
@ -57,7 +47,7 @@ RUN <<EOF
--enable-vendor \
--dist-compression-formats=gz \
--python="python3" \
--prefix="/rootfs/usr" \
--prefix="/usr" \
--libdir="/usr/lib/x86_64-linux-gnu" \
--sysconfdir="/rootfs/etc" \
--release-channel="stable" \
@ -78,27 +68,17 @@ RUN <<EOF
--set="target.x86_64-unknown-linux-gnu.ar=ar" \
--set="target.x86_64-unknown-linux-gnu.linker=cc" \
--set="target.x86_64-unknown-linux-gnu.musl-libdir=/usr/lib/x86_64-linux-gnu"
# un-usrmerge glibc
rm /lib64
mv /usr/lib64-pre-move /lib64
python3 x.py build --stage 0 --target x86_64-unknown-linux-gnu library
# RUSTFLAGS from pcsc
# export RUSTFLAGS="-L /rustc-1.76.0-src/build/x86_64-unknown-linux-musl/stage0-sysroot/lib64/rustlib/x86_64-unknown-linux-gnu/lib/ -L /rustc-1.76.0-src/build/x86_64-unknown-linux-musl/stage0-sysroot/lib64/rustlib/x86_64-unknown-linux-gnu/lib/self-contained/ -L /usr/lib/x86_64-linux-gnu -L /lib64 -C target-feature=+crt-static"
EOF
FROM build AS test
ENV RUSTFLAGS="-L /rustc-1.76.0-src/build/x86_64-unknown-linux-musl/stage0-sysroot/lib64/rustlib/x86_64-unknown-linux-gnu/lib/ -L /rustc-1.76.0-src/build/x86_64-unknown-linux-musl/stage0-sysroot/lib64/rustlib/x86_64-unknown-linux-gnu/lib/self-contained/ -L /usr/lib/x86_64-linux-gnu -L /lib64 -C target-feature=+crt-static"
RUN <<EOF
set -eux
cargo new --bin hello_world
cd hello_world
cargo run --release --target x86_64-unknown-linux-gnu
EOF
FROM build AS install
RUN <<-EOF
mkdir /rootfs
cp -r /rustc-1.76.0-src/build/x86_64-unknown-linux-musl/stage0-sysroot/lib64/rustlib/x86_64-unknown-linux-gnu /usr/lib/rustlib/x86_64-unknown-linux-gnu
mkdir -p /rootfs/usr/lib/rustlib/
cp -r \
/rustc-${VERSION}-src/build/x86_64-unknown-linux-musl/stage0-sysroot/lib64/rustlib/x86_64-unknown-linux-gnu \
/rootfs/usr/lib/rustlib/
EOF
FROM stagex/filesystem AS package