diff --git a/3rdparty/docker/bootstrap/Dockerfile b/3rdparty/docker/bootstrap/Dockerfile new file mode 100644 index 0000000000..328c157ed7 --- /dev/null +++ b/3rdparty/docker/bootstrap/Dockerfile @@ -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"] diff --git a/3rdparty/docker/bootstrap/Makefile b/3rdparty/docker/bootstrap/Makefile new file mode 100644 index 0000000000..9355bef3cf --- /dev/null +++ b/3rdparty/docker/bootstrap/Makefile @@ -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 diff --git a/3rdparty/docker/bootstrap/README.md b/3rdparty/docker/bootstrap/README.md new file mode 100644 index 0000000000..48b142f3a1 --- /dev/null +++ b/3rdparty/docker/bootstrap/README.md @@ -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! diff --git a/3rdparty/docker/bootstrap/bootstrap.sh b/3rdparty/docker/bootstrap/bootstrap.sh new file mode 100755 index 0000000000..406f588e43 --- /dev/null +++ b/3rdparty/docker/bootstrap/bootstrap.sh @@ -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 diff --git a/3rdparty/docker/bootstrap/crosstools.sh b/3rdparty/docker/bootstrap/crosstools.sh new file mode 100755 index 0000000000..51722c9970 --- /dev/null +++ b/3rdparty/docker/bootstrap/crosstools.sh @@ -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'" diff --git a/3rdparty/docker/bootstrap/prep.sh b/3rdparty/docker/bootstrap/prep.sh new file mode 100755 index 0000000000..bf73248263 --- /dev/null +++ b/3rdparty/docker/bootstrap/prep.sh @@ -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