InfiniTime.git

commit 38418931f1ee46e5405d48fcee18005b6ab4c4c7

Author: JF <jf@codingfield.com>

Merge branch 'dockerfile' of JF/PineTime into develop

 doc/buildAndProgram.md | 2 +-
 doc/buildWithDocker.md | 33 +++++++++++++++++++++++++++++++++
 docker/README.md | 2 ++
 docker/arm64/Dockerfile | 10 ++++++++++
 docker/build.sh | 25 +++++++++++++++++++++++++
 docker/x86_64/Dockerfile | 10 ++++++++++


diff --git a/doc/buildAndProgram.md b/doc/buildAndProgram.md
index 5e11bce376caef5e253f71020ddb0381e9e43c40..84d004148eec653d34d6a49170ee1aa05ffa5265 100644
--- a/doc/buildAndProgram.md
+++ b/doc/buildAndProgram.md
@@ -50,7 +50,7 @@ - pinetime-app : build the standalone (without bootloader support) version of the firmware.
 - pinetime-mcuboot-app : build the firmware with the support of the bootloader (based on MCUBoot).
 - pinetime-graphics : small firmware that writes the boot graphics into the SPI flash.
 
-If you just want to build the project and run it on the Pinetime, using *pinetime-app* is recommanded. See ???? for more info about bootloader support.
+If you just want to build the project and run it on the Pinetime, using *pinetime-app* is recommanded. See [this page](../bootloader/README.md) for more info about bootloader support.
 
 Build:
 ```




diff --git a/doc/buildWithDocker.md b/doc/buildWithDocker.md
new file mode 100644
index 0000000000000000000000000000000000000000..5101c95c01a84ba7810919873ddc8fcc410b66f7
--- /dev/null
+++ b/doc/buildWithDocker.md
@@ -0,0 +1,33 @@
+# Build the project using Docker
+A [Docker image (Dockerfile)](../docker) containing all the build environment is available for X86_64 and AMD64 architectures. This image makes the build of the firmware and the generation of the DFU file for OTA.
+
+## Build the image
+The image is not (yet) available on DockerHub, you need to build it yourself, which is quite easy. The following commands must be run from the root of the project.
+
+If you are running on a x86_64 computer : 
+```
+docker image build -t infinitime-build docker/x86_64/
+```
+
+And if your are running on an ARM64 device (tested on RaspberryPi4 and Pine64 PineBookPro):
+```
+docker image build -t infinitime-build docker/arm64/
+```
+
+This operation will take some time. It builds a Docker image based on Ubuntu, install some packages, download the ARM toolchain, the NRF SDK, MCUBoot and adafruit-nrfutil.
+
+When this is done, a new image named *infinitime-build* is available.
+
+## Run a container to build the project:
+
+```
+docker run --rm -v <project_root>:/sources infinitime-build
+```
+
+Replace *<project_root>* by the path of the root of the project on your computer. For example:
+
+```
+docker run --rm -v /home/jf/git/PineTime:/sources infinitime-build
+```
+
+This will start a container, build the firmware and generate the MCUBoot image and the DFU file. The output of the build is stored in **<project_root>/built/output**.
\ No newline at end of file




diff --git a/docker/README.md b/docker/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..71ad258ace32ad7ea7dd0526079c3f37af328b8b
--- /dev/null
+++ b/docker/README.md
@@ -0,0 +1,2 @@
+Docker images and build script for building the project using Docker.
+See [this page for more info](../doc/buildWithDocker.md).
\ No newline at end of file




diff --git a/docker/arm64/Dockerfile b/docker/arm64/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..d9157d0507d16e1a888e9c877f3926650928faba
--- /dev/null
+++ b/docker/arm64/Dockerfile
@@ -0,0 +1,10 @@
+FROM ubuntu:18.04
+RUN apt-get update -qq && apt-get install -y wget unzip cmake make build-essential git python3 python3-pip libffi-dev libssl-dev python3-dev
+RUN wget -q https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2020q2/gcc-arm-none-eabi-9-2020-q2-update-aarch64-linux.tar.bz2 -O - | tar -xj -C /opt/
+RUN wget -q https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v15.x.x/nRF5_SDK_15.3.0_59ac345.zip && unzip -q nRF5_SDK_15.3.0_59ac345.zip -d /opt/ && rm nRF5_SDK_15.3.0_59ac345.zip
+
+RUN git clone https://github.com/JuulLabs-OSS/mcuboot.git /opt/mcuboot && pip3 install -r /opt/mcuboot/scripts/requirements.txt
+RUN pip3 install adafruit-nrfutil
+
+
+CMD ["/sources/docker/build.sh"]




diff --git a/docker/build.sh b/docker/build.sh
new file mode 100755
index 0000000000000000000000000000000000000000..233ae64e6e010b6dee857a53706f7cf777f31658
--- /dev/null
+++ b/docker/build.sh
@@ -0,0 +1,25 @@
+#!/bin/sh
+export LC_ALL=C.UTF-8
+export LANG=C.UTF-8
+
+mkdir /sources/build
+cd /sources/build
+
+cmake -DARM_NONE_EABI_TOOLCHAIN_PATH=/opt/gcc-arm-none-eabi-9-2020-q2-update -DNRF5_SDK_PATH=/opt/nRF5_SDK_15.3.0_59ac345 -DUSE_OPENOCD=1 ../
+make -j
+
+/opt/mcuboot/scripts/imgtool.py create --align 4 --version 1.0.0 --header-size 32 --slot-size 475136 --pad-header /sources/build/src/pinetime-mcuboot-app.bin /sources/build/image.bin
+adafruit-nrfutil dfu genpkg --dev-type 0x0052 --application /sources/build/image.bin /sources/build/dfu.zip
+
+mkdir -p /sources/build/output
+mv /sources/build/image.bin /sources/build/output/pinetime-mcuboot-app.img
+mv /sources/build/dfu.zip /sources/build/output/pinetime-app-dfu.zip
+
+cp /sources/build/src/*.bin /sources/build/output/
+cp /sources/build/src/*.hex /sources/build/output/
+cp /sources/build/src/*.out /sources/build/output/
+cp /sources/build/src/*.map /sources/build/output/
+cp /sources/bootloader/mynewt_nosemi_4.1.7.elf.bin /sources/build/output/bootloader.bin
+
+
+




diff --git a/docker/x86_64/Dockerfile b/docker/x86_64/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..6dd604bed4ec2b538e275e474fe956676699eb46
--- /dev/null
+++ b/docker/x86_64/Dockerfile
@@ -0,0 +1,10 @@
+FROM ubuntu:18.04
+RUN apt-get update -qq && apt-get install -y wget unzip cmake make build-essential git python3 python3-pip
+RUN wget -q https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2020q2/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz -O - | tar -xj -C /opt/
+RUN wget -q https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v15.x.x/nRF5_SDK_15.3.0_59ac345.zip && unzip -q nRF5_SDK_15.3.0_59ac345.zip -d /opt/ && rm nRF5_SDK_15.3.0_59ac345.zip
+
+RUN git clone https://github.com/JuulLabs-OSS/mcuboot.git /opt/mcuboot && pip3 install -r /opt/mcuboot/scripts/requirements.txt
+RUN pip3 install adafruit-nrfutil
+
+
+CMD ["/sources/docker/build.sh"]
\ No newline at end of file