added devcontainer files
This commit is contained in:
parent
57b3397078
commit
65423b3c94
43
.devcontainer/Dockerfile
Normal file
43
.devcontainer/Dockerfile
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
FROM ubuntu:18.04
|
||||||
|
|
||||||
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
|
RUN apt-get update -qq \
|
||||||
|
&& apt-get install -y \
|
||||||
|
# x86_64 / generic packages
|
||||||
|
bash \
|
||||||
|
build-essential \
|
||||||
|
cmake \
|
||||||
|
git \
|
||||||
|
make \
|
||||||
|
python3 \
|
||||||
|
python3-pip \
|
||||||
|
tar \
|
||||||
|
unzip \
|
||||||
|
wget \
|
||||||
|
curl \
|
||||||
|
# aarch64 packages
|
||||||
|
libffi-dev \
|
||||||
|
libssl-dev \
|
||||||
|
python3-dev \
|
||||||
|
rustc \
|
||||||
|
&& rm -rf /var/cache/apt/* /var/lib/apt/lists/*;
|
||||||
|
|
||||||
|
RUN adduser infinitime
|
||||||
|
|
||||||
|
RUN pip3 install adafruit-nrfutil
|
||||||
|
# required for McuBoot
|
||||||
|
RUN pip3 install setuptools_rust
|
||||||
|
|
||||||
|
WORKDIR /opt/
|
||||||
|
# build.sh knows how to compile
|
||||||
|
COPY build.sh .
|
||||||
|
|
||||||
|
# Lets get each in a separate docker layer for better downloads
|
||||||
|
# GCC
|
||||||
|
RUN bash -c "source /opt/build.sh; GetGcc;"
|
||||||
|
# NrfSdk
|
||||||
|
RUN bash -c "source /opt/build.sh; GetNrfSdk;"
|
||||||
|
# McuBoot
|
||||||
|
RUN bash -c "source /opt/build.sh; GetMcuBoot;"
|
||||||
|
|
||||||
|
ENV SOURCES_DIR /workspaces/Pinetime
|
78
.devcontainer/build.sh
Executable file
78
.devcontainer/build.sh
Executable file
|
@ -0,0 +1,78 @@
|
||||||
|
#!/bin/bash
|
||||||
|
(return 0 2>/dev/null) && SOURCED="true" || SOURCED="false"
|
||||||
|
export LC_ALL=C.UTF-8
|
||||||
|
export LANG=C.UTF-8
|
||||||
|
set -x
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Default locations if the var isn't already set
|
||||||
|
export TOOLS_DIR="${TOOLS_DIR:=/opt}"
|
||||||
|
export SOURCES_DIR="${SOURCES_DIR:=/sources}"
|
||||||
|
export BUILD_DIR="${BUILD_DIR:=$SOURCES_DIR/build}"
|
||||||
|
export OUTPUT_DIR="${OUTPUT_DIR:=$BUILD_DIR/output}"
|
||||||
|
|
||||||
|
export BUILD_TYPE=${BUILD_TYPE:=Release}
|
||||||
|
export GCC_ARM_VER=${GCC_ARM_VER:="gcc-arm-none-eabi-9-2020-q2-update"}
|
||||||
|
export NRF_SDK_VER=${NRF_SDK_VER:="nRF5_SDK_15.3.0_59ac345"}
|
||||||
|
|
||||||
|
MACHINE="$(uname -m)"
|
||||||
|
[[ "$MACHINE" == "arm64" ]] && MACHINE="aarch64"
|
||||||
|
|
||||||
|
main() {
|
||||||
|
local target="$1"
|
||||||
|
|
||||||
|
mkdir -p "$TOOLS_DIR"
|
||||||
|
|
||||||
|
[[ ! -d "$TOOLS_DIR/$GCC_ARM_VER" ]] && GetGcc
|
||||||
|
[[ ! -d "$TOOLS_DIR/$NRF_SDK_VER" ]] && GetNrfSdk
|
||||||
|
[[ ! -d "$TOOLS_DIR/mcuboot" ]] && GetMcuBoot
|
||||||
|
|
||||||
|
mkdir -p "$BUILD_DIR"
|
||||||
|
|
||||||
|
CmakeGenerate
|
||||||
|
CmakeBuild $target
|
||||||
|
BUILD_RESULT=$?
|
||||||
|
if [ "$DISABLE_POSTBUILD" != "true" -a "$BUILD_RESULT" == 0 ]; then
|
||||||
|
source "$BUILD_DIR/post_build.sh"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
GetGcc() {
|
||||||
|
GCC_SRC="$GCC_ARM_VER-$MACHINE-linux.tar.bz"
|
||||||
|
wget -q https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2020q2/$GCC_SRC -O - | tar -xj -C $TOOLS_DIR/
|
||||||
|
}
|
||||||
|
|
||||||
|
GetMcuBoot() {
|
||||||
|
git clone https://github.com/JuulLabs-OSS/mcuboot.git "$TOOLS_DIR/mcuboot"
|
||||||
|
pip3 install -r "$TOOLS_DIR/mcuboot/scripts/requirements.txt"
|
||||||
|
}
|
||||||
|
|
||||||
|
GetNrfSdk() {
|
||||||
|
wget -q "https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v15.x.x/$NRF_SDK_VER.zip" -O /tmp/$NRF_SDK_VER
|
||||||
|
unzip -q /tmp/$NRF_SDK_VER -d "$TOOLS_DIR/"
|
||||||
|
rm /tmp/$NRF_SDK_VER
|
||||||
|
}
|
||||||
|
|
||||||
|
CmakeGenerate() {
|
||||||
|
# We can swap the CD and trailing SOURCES_DIR for -B and -S respectively
|
||||||
|
# once we go to newer CMake (Ubuntu 18.10 gives us CMake 3.10)
|
||||||
|
cd "$BUILD_DIR"
|
||||||
|
|
||||||
|
cmake -G "Unix Makefiles" \
|
||||||
|
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
|
||||||
|
-DUSE_OPENOCD=1 \
|
||||||
|
-DARM_NONE_EABI_TOOLCHAIN_PATH="$TOOLS_DIR/$GCC_ARM_VER" \
|
||||||
|
-DNRF5_SDK_PATH="$TOOLS_DIR/$NRF_SDK_VER" \
|
||||||
|
"$SOURCES_DIR"
|
||||||
|
cmake -L -N .
|
||||||
|
}
|
||||||
|
|
||||||
|
CmakeBuild() {
|
||||||
|
local target="$1"
|
||||||
|
[[ -n "$target" ]] && target="--target $target"
|
||||||
|
if cmake --build "$BUILD_DIR" --config $BUILD_TYPE $target -- -j$(nproc)
|
||||||
|
then return 0; else return 1;
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ $SOURCED == "false" ]] && main "$@" || echo "Sourced!"
|
32
.devcontainer/devcontainer.json
Normal file
32
.devcontainer/devcontainer.json
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
|
||||||
|
// https://github.com/microsoft/vscode-dev-containers/tree/v0.154.2/containers/cpp
|
||||||
|
{
|
||||||
|
// "name": "Pinetime",
|
||||||
|
// "image": "feabhas/pinetime-dev"
|
||||||
|
"build": {
|
||||||
|
"dockerfile": "Dockerfile",
|
||||||
|
// Update 'VARIANT' to pick an Debian / Ubuntu OS version: debian-10, debian-9, ubuntu-20.04, ubuntu-18.04
|
||||||
|
// "args": { "VARIANT": "ubuntu-20.04" }
|
||||||
|
},
|
||||||
|
"runArgs": [ "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined"],
|
||||||
|
|
||||||
|
// Set *default* container specific settings.json values on container create.
|
||||||
|
"settings": {
|
||||||
|
"terminal.integrated.shell.linux": "/bin/bash"
|
||||||
|
},
|
||||||
|
|
||||||
|
// Add the IDs of extensions you want installed when the container is created.
|
||||||
|
"extensions": [
|
||||||
|
"ms-vscode.cpptools"
|
||||||
|
],
|
||||||
|
|
||||||
|
// Use 'forwardPorts' to make a list of ports inside the container available locally.
|
||||||
|
// "forwardPorts": [],
|
||||||
|
|
||||||
|
// Use 'postCreateCommand' to run commands after the container is created.
|
||||||
|
// "postCreateCommand": "gcc -v",
|
||||||
|
|
||||||
|
// Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
|
||||||
|
// "remoteUser": "vscode"
|
||||||
|
"remoteUser": "infinitime"
|
||||||
|
}
|
Loading…
Reference in a new issue