clang
unvendor
This commit is contained in:
parent
9a4b261179
commit
404aa8ebbb
139 changed files with 8091 additions and 1178 deletions
55
06/build.sh
Executable file
55
06/build.sh
Executable file
|
@ -0,0 +1,55 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# This is the straigthforward bootstrapping way.
|
||||
# Prepare a directory with the initial TinyCC compiler, and a ton of sources.
|
||||
# Then exec into it and let it bootstrap itself.
|
||||
|
||||
# You can refer to the Makefile for a more refined, totally optional approach
|
||||
# with incremental builds, better build isolation etc.
|
||||
|
||||
set -uex
|
||||
|
||||
export NPROC=${NPROC:-${1:-1}}
|
||||
|
||||
cp ../05/tcc-final/tcc tcc-seed
|
||||
|
||||
if [[ ! -e tcc-seed ]]; then
|
||||
echo 'You need to supply a statically linked TinyCC as `tcc-seed`.'
|
||||
echo -n 'You can `./compile-tcc-seed-with-nix.sh` '
|
||||
echo 'if you have `nix` and trust in me.'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Create a stage directory
|
||||
mkdir -p stage
|
||||
|
||||
# Download all the required source files
|
||||
./download.sh
|
||||
|
||||
# Inject initial tcc and our scripts; pre-unpack and patch stage 1 sources,
|
||||
# in a separate file because it makes sense to run it separately sometimes.
|
||||
./seed.sh
|
||||
|
||||
# Exec into stage1.c inside stage with env unset,
|
||||
# without network, with EUID=EGID=0 and with /dev/null being a /dev/null.
|
||||
# See helpers/chroot and helpers/chroot-inner for more explanations
|
||||
# Alternatively, you can chroot if you're not a fan of user namespaces.
|
||||
MOUNT=$(command -v mount)
|
||||
if [[ -e /run/wrappers/bin/mount.real ]]; then # NixOS wrapper might be buggy
|
||||
MOUNT=$(cat /run/wrappers/bin/mount.real)
|
||||
fi
|
||||
MKDIR=$(command -v mkdir)
|
||||
CHROOT=$(command -v chroot)
|
||||
|
||||
exec env -i "NPROC=$NPROC" unshare -nrm bash -uexs <<EOF
|
||||
$MKDIR stage/dev; :> stage/dev/null
|
||||
$MOUNT --bind /dev/null stage/dev/null
|
||||
|
||||
exec $CHROOT stage \
|
||||
/store/0-tcc-seed -I /protosrc/tinycc/include -nostdinc -nostdlib -Werror -run \
|
||||
-DCHAINLOAD='"/recipes/all-past-stage1.sh"' \
|
||||
/recipes/1-stage1.c
|
||||
EOF
|
||||
|
||||
# There's no next step,
|
||||
# upon completion stage1.c will exec into recipes/all-past-stage1.sh
|
Loading…
Add table
Add a link
Reference in a new issue