docker/bootstrap: Add a few tools to bootstrap in a container

* The bootstrap process will pick up on local toolchains such
  as clang and use them instead of the correct gcc cross-tools.
* This limits environmental factors which can break bootstrap.

Change-Id: Iacdd2a44cf26e18f838c9251fb9eddfbcb12565e
This commit is contained in:
Alexander von Gluck IV
2018-11-02 15:12:04 -05:00
parent 8de3883d8b
commit 131f09907e
6 changed files with 143 additions and 0 deletions
+27
View File
@@ -0,0 +1,27 @@
FROM debian
ENV DEBIAN_FRONTEND="noninteractive"
RUN apt-get update
RUN apt-get install -y git nasm autoconf automake texinfo flex \
bison gawk build-essential unzip wget zip less zlib1g-dev \
libcurl4-openssl-dev genisoimage libtool mtools gcc-multilib \
u-boot-tools util-linux device-tree-compiler bc
ENV GIT_BUILDTOOLS="https://git.haiku-os.org/buildtools"
ENV GIT_HAIKU="https://git.haiku-os.org/haiku"
ENV GIT_HAIKUPORTER="https://github.com/haikuports/haikuporter.git"
ENV GIT_HAIKUPORTS="https://github.com/haikuports/haikuports.git"
ENV GIT_HAIKUPORTS_CROSS="https://github.com/haikuports/haikuports.cross.git"
ADD prep.sh /usr/local/bin/prep
ADD crosstools.sh /usr/local/bin/crosstools
ADD bootstrap.sh /usr/local/bin/bootstrap
ENV WORKPATH="/work"
ENV PATH="$PATH:$WORKPATH/bin"
WORKDIR "/work"
VOLUME ["/work"]
ENTRYPOINT ["/bin/bash", "-c"]
+13
View File
@@ -0,0 +1,13 @@
default:
docker build . -t docker.io/haiku/bootstrap
clean:
docker rm docker.io/haiku/bootstrap
docker volume rm bootstrap_work
init:
docker run -v bootstrap_work:/work docker.io/haiku/bootstrap prep
crosstools:
docker run -e TARGET_ARCH=$(TARGET_ARCH) -v bootstrap_work:/work docker.io/haiku/bootstrap crosstools
bootstrap:
docker run -e TARGET_ARCH=$(TARGET_ARCH) -v bootstrap_work:/work docker.io/haiku/bootstrap bootstrap
enter:
docker run -it -e TARGET_ARCH=$(TARGET_ARCH) -v bootstrap_work:/work docker.io/haiku/bootstrap /bin/bash -l
+8
View File
@@ -0,0 +1,8 @@
# Haiku bootstrap in a container
1) make
2) make init
3) TARGET_ARCH=arm make crosstools
4) TARGET_ARCH=arm make bootstrap
5) ```make enter``` lets you enter the container and poke around.
6) profit!
+21
View File
@@ -0,0 +1,21 @@
#!/bin/bash
if [ ! -d $WORKPATH ]; then
echo "$WORKPATH is not available!"
exit 1
fi
if [ ! -d $WORKPATH/src ]; then
echo "$WORKPATH/src is not available!"
exit 1
fi
if [ -z $TARGET_ARCH ]; then
echo "TARGET_ARCH isn't set!"
exit 1
fi
GENERATED=$WORKPATH/generated.$TARGET_ARCH
cd $GENERATED
jam -q @bootstrap-raw
+27
View File
@@ -0,0 +1,27 @@
#!/bin/bash
if [ ! -d $WORKPATH ]; then
echo "$WORKPATH is not available!"
exit 1
fi
if [ ! -d $WORKPATH/src ]; then
echo "$WORKPATH/src is not available!"
exit 1
fi
if [ -z $TARGET_ARCH ]; then
echo "TARGET_ARCH isn't set!"
exit 1
fi
GENERATED=$WORKPATH/generated.$TARGET_ARCH
mkdir -p $GENERATED
echo "Beginning a bootstrap build for $TARGET_ARCH at $GENERATED..."
cd $GENERATED
$WORKPATH/src/haiku/configure -j4 --build-cross-tools $TARGET_ARCH $WORKPATH/src/buildtools \
--bootstrap $WORKPATH/src/haikuporter/haikuporter $WORKPATH/src/haikuports.cross $WORKPATH/src/haikuports
echo "If everything was successful, your next step is 'make bootstrap'"
+47
View File
@@ -0,0 +1,47 @@
#!/bin/bash
if [ ! -d $WORKPATH ]; then
echo "$WORKPATH is not available!"
exit 1
fi
if [ ! -d $WORKPATH/src ]; then
mkdir $WORKPATH/src
fi
# These we clone or pull updates on
if [ ! -d $WORKPATH/src/buildtools ]; then
git clone $GIT_BUILDTOOLS $WORKPATH/src/buildtools
else
git -C $WORKPATH/src/buildtools pull --rebase
fi
if [ ! -d $WORKPATH/src/haikuporter ]; then
git clone $GIT_HAIKUPORTER $WORKPATH/src/haikuporter
else
git -C $WORKPATH/src/buildtools pull --rebase
fi
if [ ! -d $WORKPATH/src/haikuports ]; then
git clone $GIT_HAIKUPORTS $WORKPATH/src/haikuports
else
git -C $WORKPATH/src/haikuports pull --rebase
fi
# These we just clone since modifications are likely
if [ ! -d $WORKPATH/src/haikuports.cross ]; then
git clone $GIT_HAIKUPORTS_CROSS $WORKPATH/src/haikuports.cross
fi
if [ ! -d $WORKPATH/src/haiku ]; then
git clone $GIT_HAIKU $WORKPATH/src/haiku
fi
mkdir $WORKPATH/bin
if [ ! -f $WORKPATH/bin/jam ]; then
cd $WORKPATH/src/buildtools/jam
make
cp -f bin.linuxx86/jam $WORKPATH/bin/jam
cd -
fi