commit
						643077341b
					
				
							
								
								
									
										65
									
								
								.devcontainer/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								.devcontainer/Dockerfile
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,65 @@
 | 
			
		||||
FROM ubuntu:latest
 | 
			
		||||
 | 
			
		||||
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 \
 | 
			
		||||
      dos2unix \
 | 
			
		||||
      clang-format-12 \
 | 
			
		||||
      clang-tidy \
 | 
			
		||||
      locales \
 | 
			
		||||
      libncurses5 \
 | 
			
		||||
# aarch64 packages
 | 
			
		||||
      libffi-dev \
 | 
			
		||||
      libssl-dev \
 | 
			
		||||
      python3-dev \ 
 | 
			
		||||
      rustc \
 | 
			
		||||
    && rm -rf /var/cache/apt/* /var/lib/apt/lists/*;
 | 
			
		||||
    
 | 
			
		||||
#SET LOCALE 
 | 
			
		||||
RUN locale-gen en_US.UTF-8
 | 
			
		||||
ENV LANG en_US.UTF-8
 | 
			
		||||
ENV LANGUAGE en_US:en
 | 
			
		||||
ENV LC_ALL en_US.UTF-8 
 | 
			
		||||
 | 
			
		||||
RUN pip3 install adafruit-nrfutil
 | 
			
		||||
# required for McuBoot
 | 
			
		||||
RUN pip3 install setuptools_rust
 | 
			
		||||
 | 
			
		||||
WORKDIR /opt/
 | 
			
		||||
# build.sh knows how to compile but it problimatic on Win10
 | 
			
		||||
COPY build.sh .
 | 
			
		||||
RUN chmod +x build.sh
 | 
			
		||||
# create_build_openocd.sh uses cmake to crate to build directory
 | 
			
		||||
COPY create_build_openocd.sh .
 | 
			
		||||
RUN chmod +x create_build_openocd.sh
 | 
			
		||||
# Lets get each in a separate docker layer for better downloads
 | 
			
		||||
# GCC
 | 
			
		||||
# RUN bash -c "source /opt/build.sh; GetGcc;"
 | 
			
		||||
RUN wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2020q2/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2 -O - | tar -xj -C /opt
 | 
			
		||||
# NrfSdk
 | 
			
		||||
# RUN bash -c "source /opt/build.sh; GetNrfSdk;"
 | 
			
		||||
RUN wget -q "https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v15.x.x/nRF5_SDK_15.3.0_59ac345.zip" -O /tmp/nRF5_SDK_15.3.0_59ac345
 | 
			
		||||
RUN unzip -q /tmp/nRF5_SDK_15.3.0_59ac345 -d /opt
 | 
			
		||||
RUN rm /tmp/nRF5_SDK_15.3.0_59ac345
 | 
			
		||||
# McuBoot
 | 
			
		||||
# RUN bash -c "source /opt/build.sh; GetMcuBoot;"
 | 
			
		||||
RUN git clone https://github.com/JuulLabs-OSS/mcuboot.git
 | 
			
		||||
RUN pip3 install -r ./mcuboot/scripts/requirements.txt
 | 
			
		||||
 | 
			
		||||
RUN adduser infinitime
 | 
			
		||||
 | 
			
		||||
ENV NRF5_SDK_PATH /opt/nRF5_SDK_15.3.0_59ac345
 | 
			
		||||
ENV ARM_NONE_EABI_TOOLCHAIN_PATH /opt/gcc-arm-none-eabi-9-2020-q2-update
 | 
			
		||||
ENV SOURCES_DIR /workspaces/InfiniTime
 | 
			
		||||
							
								
								
									
										60
									
								
								.devcontainer/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								.devcontainer/README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,60 @@
 | 
			
		||||
# VS Code Dev Container
 | 
			
		||||
This is a docker-based interactive development environment using VS Code and Docker Dev Containers removing the need to install any tools locally*
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Requirements
 | 
			
		||||
 | 
			
		||||
- VS Code
 | 
			
		||||
  - [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) extension
 | 
			
		||||
- Docker
 | 
			
		||||
- OpenOCD - For debugging
 | 
			
		||||
 | 
			
		||||
## Using
 | 
			
		||||
 | 
			
		||||
### Code editing, and building.
 | 
			
		||||
 | 
			
		||||
1. Clone InfiniTime and update submodules
 | 
			
		||||
2. Launch VS Code
 | 
			
		||||
3. Open InfiniTime directory, 
 | 
			
		||||
4. Allow VS Code to open folder with devcontainer. 
 | 
			
		||||
 | 
			
		||||
After this the environment will be built if you do not currently have a container setup, it will install all the necessary tools and extra VSCode extensions. 
 | 
			
		||||
 | 
			
		||||
In order to build InfiniTime we need to run the initial submodule init and CMake commands.
 | 
			
		||||
 | 
			
		||||
#### Manually 
 | 
			
		||||
 | 
			
		||||
 You can use the VS Code terminal to run the CMake commands as outlined in the [build instructions](blob/develop/doc/buildAndProgram.md) 
 | 
			
		||||
 | 
			
		||||
#### Script
 | 
			
		||||
 | 
			
		||||
The dev environment comes with some scripts to make this easier, They are located in /opt/.
 | 
			
		||||
 | 
			
		||||
There are also VS Code tasks provided should you desire to use those. 
 | 
			
		||||
 | 
			
		||||
The task "update submodules" will update the git submodules
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Build
 | 
			
		||||
 | 
			
		||||
You can use the build.sh script located in /opt/
 | 
			
		||||
 | 
			
		||||
CMake is also configured and controls for the CMake plugin are available in VS Code
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Debugging
 | 
			
		||||
 | 
			
		||||
Docker on windows does not support passing USB devices to the underlying WSL2 subsystem, To get around this we use OpenOCD in server mode running on the host.
 | 
			
		||||
 | 
			
		||||
`openocd -f <yourinterface> -f <nrf52.cfg target file>`
 | 
			
		||||
 | 
			
		||||
This will launch OpenOCD in server mode and attach it to the MCU. 
 | 
			
		||||
 | 
			
		||||
The default launch.json file expects OpenOCD to be listening on port 3333, edit if needed
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Current Issues
 | 
			
		||||
Currently WSL2 Has some real performance issues with IO on a windows host. Accessing files on the virtualized filesystem is much faster. Using VS Codes "clone in container" feature of the Remote - Containers will get around this. After the container is built you will need to update the submodules and follow the build instructions like normal 
 | 
			
		||||
							
								
								
									
										78
									
								
								.devcontainer/build.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								.devcontainer/build.sh
									
									
									
									
									
										Normal 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!"
 | 
			
		||||
							
								
								
									
										2
									
								
								.devcontainer/build_app.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								.devcontainer/build_app.sh
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
cmake --build /workspaces/Pinetime/build --config Release -- -j6 pinetime-app
 | 
			
		||||
							
								
								
									
										3
									
								
								.devcontainer/create_build_openocd.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.devcontainer/create_build_openocd.sh
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
rm -rf build/
 | 
			
		||||
cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE=Release -DUSE_OPENOCD=1 -DARM_NONE_EABI_TOOLCHAIN_PATH=/opt/gcc-arm-none-eabi-9-2020-q2-update -DNRF5_SDK_PATH=/opt/nRF5_SDK_15.3.0_59ac345 -S . -Bbuild
 | 
			
		||||
							
								
								
									
										36
									
								
								.devcontainer/devcontainer.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								.devcontainer/devcontainer.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,36 @@
 | 
			
		||||
// 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",
 | 
			
		||||
		"ms-vscode.cmake-tools",
 | 
			
		||||
		"marus25.cortex-debug",
 | 
			
		||||
		"notskm.clang-tidy",
 | 
			
		||||
		"mjohns.clang-format"
 | 
			
		||||
	],
 | 
			
		||||
 | 
			
		||||
	// 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": "bash /opt/create_build_openocd.sh",
 | 
			
		||||
 | 
			
		||||
	// Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
 | 
			
		||||
	// "remoteUser": "vscode"
 | 
			
		||||
	"remoteUser": "infinitime"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										2
									
								
								.devcontainer/make_build_dir.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								.devcontainer/make_build_dir.sh
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE=Release -DUSE_OPENOCD=1 -DARM_NONE_EABI_TOOLCHAIN_PATH=/opt/gcc-arm-none-eabi-9-2020-q2-update -DNRF5_SDK_PATH=/opt/nRF5_SDK_15.3.0_59ac345 ${SOURCES_DIR}
 | 
			
		||||
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -4,7 +4,7 @@
 | 
			
		||||
 | 
			
		||||
# CMake
 | 
			
		||||
cmake-build-*
 | 
			
		||||
cmake-*
 | 
			
		||||
cmake-*/
 | 
			
		||||
CMakeFiles
 | 
			
		||||
**/CMakeCache.txt
 | 
			
		||||
cmake_install.cmake
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										20
									
								
								.vscode/c_cpp_properties.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								.vscode/c_cpp_properties.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,20 @@
 | 
			
		||||
{
 | 
			
		||||
    "configurations": [
 | 
			
		||||
        {
 | 
			
		||||
            "name": "nrfCC",
 | 
			
		||||
            "includePath": [
 | 
			
		||||
                "${workspaceFolder}/**",
 | 
			
		||||
                "${workspaceFolder}/src/**",
 | 
			
		||||
                "${workspaceFolder}/src"
 | 
			
		||||
            ],
 | 
			
		||||
            "defines": [],
 | 
			
		||||
            "compilerPath": "${env:ARM_NONE_EABI_TOOLCHAIN_PATH}/bin/arm-none-eabi-gcc",
 | 
			
		||||
            "cStandard": "c11",
 | 
			
		||||
            "cppStandard": "c++14",
 | 
			
		||||
            "intelliSenseMode": "linux-gcc-arm",
 | 
			
		||||
            "configurationProvider": "ms-vscode.cpp-tools",
 | 
			
		||||
            "compileCommands": "${workspaceFolder}/build/compile_commands.json"
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "version": 4
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										62
									
								
								.vscode/cmake-variants.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								.vscode/cmake-variants.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,62 @@
 | 
			
		||||
{
 | 
			
		||||
    "buildType": {
 | 
			
		||||
      "default": "release",
 | 
			
		||||
        "choices": { 
 | 
			
		||||
          "debug": {
 | 
			
		||||
            "short": "Debug",
 | 
			
		||||
            "long": "Emit debug information without performing optimizations",
 | 
			
		||||
            "buildType": "Debug"
 | 
			
		||||
          },
 | 
			
		||||
          "release": {
 | 
			
		||||
            "short": "Release",
 | 
			
		||||
            "long": "Perform optimizations",
 | 
			
		||||
            "buildType": "Release"
 | 
			
		||||
          }    
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    "programmer":{
 | 
			
		||||
        "default": "OpenOCD",
 | 
			
		||||
        "choices":{
 | 
			
		||||
            "OpenOCD":{
 | 
			
		||||
                "short":"OpenOCD",
 | 
			
		||||
                "long": "Use OpenOCD",
 | 
			
		||||
                "settings":{
 | 
			
		||||
                    "USE_OPENOCD":1
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "JLink":{
 | 
			
		||||
                "short":"JLink",
 | 
			
		||||
                "long": "Use JLink",
 | 
			
		||||
                "settings":{
 | 
			
		||||
                    "USE_JLINK":1
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "GDB":{
 | 
			
		||||
                "short":"GDB",
 | 
			
		||||
                "long": "Use GDB",
 | 
			
		||||
                "settings":{
 | 
			
		||||
                    "USE_GDB_CLIENT":1
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    "DFU": {
 | 
			
		||||
        "default": "no",
 | 
			
		||||
          "choices": { 
 | 
			
		||||
            "no": {
 | 
			
		||||
              "short": "No DFU",
 | 
			
		||||
              "long": "Do not build DFU",
 | 
			
		||||
              "settings": {
 | 
			
		||||
                  "BUILD_DFU":"0"
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "yes": {
 | 
			
		||||
                "short": "Build DFU",
 | 
			
		||||
                "long": "Build DFU",
 | 
			
		||||
                "settings": {
 | 
			
		||||
                    "BUILD_DFU":"1"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										3
									
								
								.vscode/extensions.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.vscode/extensions.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
{
 | 
			
		||||
    "recommendations": ["ms-vscode.cpptools","ms-vscode.cmake-tools","marus25.cortex-debug"]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										46
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,46 @@
 | 
			
		||||
  {
 | 
			
		||||
    "version": "0.1.0",
 | 
			
		||||
    "configurations": [
 | 
			
		||||
        {
 | 
			
		||||
            "name": "Debug - Openocd docker Remote",
 | 
			
		||||
            "type":"cortex-debug",
 | 
			
		||||
            "cortex-debug.armToolchainPath":"${env:ARM_NONE_EABI_TOOLCHAIN_PATH}/bin",
 | 
			
		||||
            "cwd": "${workspaceRoot}",
 | 
			
		||||
            "executable": "${command:cmake.launchTargetPath}",
 | 
			
		||||
            "request": "launch",
 | 
			
		||||
            "servertype": "external",
 | 
			
		||||
            // This may need to be arm-none-eabi-gdb depending on your system
 | 
			
		||||
            "gdbPath" : "${env:ARM_NONE_EABI_TOOLCHAIN_PATH}/bin/arm-none-eabi-gdb",
 | 
			
		||||
            // Connect to an already running OpenOCD instance
 | 
			
		||||
            "gdbTarget": "host.docker.internal:3333",
 | 
			
		||||
            "svdFile": "${workspaceRoot}/nrf52.svd",
 | 
			
		||||
            "runToMain": true,
 | 
			
		||||
            // Work around for stopping at main on restart
 | 
			
		||||
            "postRestartCommands": [
 | 
			
		||||
                "break main",
 | 
			
		||||
                "continue"
 | 
			
		||||
            ]
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "name": "Debug - Openocd Local",
 | 
			
		||||
            "type":"cortex-debug",
 | 
			
		||||
            "cortex-debug.armToolchainPath":"${env:ARM_NONE_EABI_TOOLCHAIN_PATH}/bin",
 | 
			
		||||
            "cwd": "${workspaceRoot}",
 | 
			
		||||
            "executable": "${command:cmake.launchTargetPath}",
 | 
			
		||||
            "request": "launch",
 | 
			
		||||
            "servertype": "openocd",
 | 
			
		||||
            // This may need to be arm-none-eabi-gdb depending on your system
 | 
			
		||||
            "gdbPath" : "${env:ARM_NONE_EABI_TOOLCHAIN_PATH}/bin/arm-none-eabi-gdb",
 | 
			
		||||
            // Connect to an already running OpenOCD instance
 | 
			
		||||
            "gdbTarget": "localhost:3333",
 | 
			
		||||
            "svdFile": "${workspaceRoot}/nrf52.svd",
 | 
			
		||||
            "runToMain": true,
 | 
			
		||||
            // Work around for stopping at main on restart
 | 
			
		||||
            "postRestartCommands": [
 | 
			
		||||
                "break main",
 | 
			
		||||
                "continue"
 | 
			
		||||
            ]
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										66
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										66
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							@ -1,59 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
    "files.associations": {
 | 
			
		||||
        "chrono": "cpp",
 | 
			
		||||
        "list": "cpp",
 | 
			
		||||
        "array": "cpp",
 | 
			
		||||
        "atomic": "cpp",
 | 
			
		||||
        "bit": "cpp",
 | 
			
		||||
        "*.tcc": "cpp",
 | 
			
		||||
        "cctype": "cpp",
 | 
			
		||||
        "charconv": "cpp",
 | 
			
		||||
        "clocale": "cpp",
 | 
			
		||||
        "cmath": "cpp",
 | 
			
		||||
        "condition_variable": "cpp",
 | 
			
		||||
        "cstdarg": "cpp",
 | 
			
		||||
        "cstddef": "cpp",
 | 
			
		||||
        "cstdint": "cpp",
 | 
			
		||||
        "cstdio": "cpp",
 | 
			
		||||
        "cstdlib": "cpp",
 | 
			
		||||
        "cstring": "cpp",
 | 
			
		||||
        "ctime": "cpp",
 | 
			
		||||
        "cwchar": "cpp",
 | 
			
		||||
        "cwctype": "cpp",
 | 
			
		||||
        "deque": "cpp",
 | 
			
		||||
        "unordered_map": "cpp",
 | 
			
		||||
        "vector": "cpp",
 | 
			
		||||
        "exception": "cpp",
 | 
			
		||||
        "algorithm": "cpp",
 | 
			
		||||
        "functional": "cpp",
 | 
			
		||||
        "iterator": "cpp",
 | 
			
		||||
        "memory": "cpp",
 | 
			
		||||
        "memory_resource": "cpp",
 | 
			
		||||
        "netfwd": "cpp",
 | 
			
		||||
        "numeric": "cpp",
 | 
			
		||||
        "optional": "cpp",
 | 
			
		||||
        "random": "cpp",
 | 
			
		||||
        "ratio": "cpp",
 | 
			
		||||
        "string": "cpp",
 | 
			
		||||
        "string_view": "cpp",
 | 
			
		||||
        "system_error": "cpp",
 | 
			
		||||
        "tuple": "cpp",
 | 
			
		||||
        "type_traits": "cpp",
 | 
			
		||||
        "utility": "cpp",
 | 
			
		||||
        "fstream": "cpp",
 | 
			
		||||
        "initializer_list": "cpp",
 | 
			
		||||
        "iosfwd": "cpp",
 | 
			
		||||
        "iostream": "cpp",
 | 
			
		||||
        "istream": "cpp",
 | 
			
		||||
        "limits": "cpp",
 | 
			
		||||
        "mutex": "cpp",
 | 
			
		||||
        "new": "cpp",
 | 
			
		||||
        "ostream": "cpp",
 | 
			
		||||
        "sstream": "cpp",
 | 
			
		||||
        "stdexcept": "cpp",
 | 
			
		||||
        "streambuf": "cpp",
 | 
			
		||||
        "thread": "cpp",
 | 
			
		||||
        "cinttypes": "cpp",
 | 
			
		||||
        "typeinfo": "cpp"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
    "C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools",
 | 
			
		||||
    "cmake.configureArgs": [
 | 
			
		||||
        "-DARM_NONE_EABI_TOOLCHAIN_PATH=${env:ARM_NONE_EABI_TOOLCHAIN_PATH}",
 | 
			
		||||
        "-DNRF5_SDK_PATH=${env:NRF5_SDK_PATH}",
 | 
			
		||||
    ],
 | 
			
		||||
    "cmake.generator": "Unix Makefiles",
 | 
			
		||||
    "clang-tidy.buildPath": "build/compile_commands.json"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										44
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,44 @@
 | 
			
		||||
{
 | 
			
		||||
	"version": "2.0.0",
 | 
			
		||||
	"tasks": [
 | 
			
		||||
		{
 | 
			
		||||
			"label": "create openocd build",
 | 
			
		||||
			"type": "shell",
 | 
			
		||||
			"command": "/opt/create_build_openocd.sh",
 | 
			
		||||
			"group": {
 | 
			
		||||
				"kind": "build",
 | 
			
		||||
				"isDefault": true
 | 
			
		||||
			},
 | 
			
		||||
			"presentation": {
 | 
			
		||||
				"reveal": "always",
 | 
			
		||||
				"panel": "shared"
 | 
			
		||||
			},
 | 
			
		||||
			"problemMatcher": []
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"label": "update submodules",
 | 
			
		||||
			"type": "shell",
 | 
			
		||||
			"command": "git submodule update --init",
 | 
			
		||||
			"options": {
 | 
			
		||||
				"cwd": "${workspaceFolder}"
 | 
			
		||||
			},
 | 
			
		||||
			"group": {
 | 
			
		||||
				"kind": "build",
 | 
			
		||||
				"isDefault": true
 | 
			
		||||
			},
 | 
			
		||||
			"presentation": {
 | 
			
		||||
				"reveal": "always",
 | 
			
		||||
				"panel": "shared"
 | 
			
		||||
			},
 | 
			
		||||
			"problemMatcher": []
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"label": "BuildInit",
 | 
			
		||||
			"dependsOn": [
 | 
			
		||||
				"update submodules",
 | 
			
		||||
				"create openocd build"
 | 
			
		||||
			],
 | 
			
		||||
			"problemMatcher": []
 | 
			
		||||
		}
 | 
			
		||||
	]
 | 
			
		||||
}
 | 
			
		||||
@ -93,6 +93,7 @@ As of now, here is the list of achievements of this project:
 | 
			
		||||
 - [Build the project](doc/buildAndProgram.md)
 | 
			
		||||
 - [Flash the firmware using OpenOCD and STLinkV2](doc/openOCD.md)
 | 
			
		||||
 - [Build the project with Docker](doc/buildWithDocker.md)
 | 
			
		||||
 - [Build the project with VSCode](doc/buildWithVScode.md)
 | 
			
		||||
 - [Bootloader, OTA and DFU](./bootloader/README.md)
 | 
			
		||||
 - [Stub using NRF52-DK](./doc/PinetimeStubWithNrf52DK.md)
 | 
			
		||||
 - Logging with JLink RTT.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										42
									
								
								doc/buildWithVScode.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								doc/buildWithVScode.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,42 @@
 | 
			
		||||
# Build and Develop the project using VS Code
 | 
			
		||||
 | 
			
		||||
The .VS Code folder contains configuration files for developing InfiniTime with VS Code. Effort was made to have these rely on Environment variables instead of hardcoded paths.
 | 
			
		||||
 | 
			
		||||
## Environment Setup
 | 
			
		||||
 | 
			
		||||
To support as many setups as possible the VS Code configuration files expect there to be certain environment variables to be set.
 | 
			
		||||
 | 
			
		||||
 Variable | Description | Example
 | 
			
		||||
----------|-------------|--------
 | 
			
		||||
**ARM_NONE_EABI_TOOLCHAIN_PATH**|path to the toolchain directory|`export ARM_NONE_EABI_TOOLCHAIN_PATH=/opt/gcc-arm-none-eabi-9-2020-q2-update`
 | 
			
		||||
**NRF5_SDK_PATH**|path to the NRF52 SDK|`export NRF5_SDK_PATH=/opt/nRF5_SDK_15.3.0_59ac345`
 | 
			
		||||
 | 
			
		||||
## VS Code Extensions
 | 
			
		||||
 | 
			
		||||
We leverage a few VS Code extensions for ease of development.
 | 
			
		||||
 | 
			
		||||
#### Required Extensions
 | 
			
		||||
 | 
			
		||||
- [C/C++](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) - C/C++ IntelliSense, debugging, and code browsing.
 | 
			
		||||
- [CMake Tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools) - Extended CMake support in Visual Studio Code
 | 
			
		||||
 | 
			
		||||
#### Optional Extensions
 | 
			
		||||
 | 
			
		||||
[Cortex-Debug](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) - ARM Cortex-M GDB Debugger support for VS Code
 | 
			
		||||
 | 
			
		||||
Cortex-Debug is only required for interactive debugging using VS Codes built in GDB support.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## VS Code/Docker DevContainer
 | 
			
		||||
 | 
			
		||||
The .devcontainer folder contains the configuration and scripts for using a Docker dev container for building InfiniTime
 | 
			
		||||
 | 
			
		||||
Using the [Remote-Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) extension is recommended. It will handle configuring the Docker virtual machine and setting everything up. 
 | 
			
		||||
 | 
			
		||||
More documentation is available in the [readme in .devcontainer](.devcontainer/readme.md)	
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user