1+ #! /bin/bash
2+ (return 0 2> /dev/null) && SOURCED=" true" || SOURCED=" false"
3+ export LC_ALL=C.UTF-8
4+ export LANG=C.UTF-8
5+ set -x
6+ set -e
7+
8+ # Default locations if the var isn't already set
9+ export TOOLS_DIR=" ${TOOLS_DIR:=/ opt} "
10+ export SOURCES_DIR=" ${SOURCES_DIR:=/ sources} "
11+ export BUILD_DIR=" ${BUILD_DIR:= $SOURCES_DIR / build} "
12+ export OUTPUT_DIR=" ${OUTPUT_DIR:= $BUILD_DIR / output} "
13+
14+ export BUILD_TYPE=${BUILD_TYPE:= Release}
15+ export GCC_ARM_VER=${GCC_ARM_VER:= " gcc-arm-none-eabi-9-2020-q2-update" }
16+ export NRF_SDK_VER=${NRF_SDK_VER:= " nRF5_SDK_15.3.0_59ac345" }
17+
18+ MACHINE=" $( uname -m) "
19+ [[ " $MACHINE " == " arm64" ]] && MACHINE=" aarch64"
20+
21+ main () {
22+ local target=" $1 "
23+
24+ mkdir -p " $TOOLS_DIR "
25+
26+ [[ ! -d " $TOOLS_DIR /$GCC_ARM_VER " ]] && GetGcc
27+ [[ ! -d " $TOOLS_DIR /$NRF_SDK_VER " ]] && GetNrfSdk
28+ [[ ! -d " $TOOLS_DIR /mcuboot" ]] && GetMcuBoot
29+
30+ mkdir -p " $BUILD_DIR "
31+
32+ CmakeGenerate
33+ CmakeBuild $target
34+ BUILD_RESULT=$?
35+ if [ " $DISABLE_POSTBUILD " != " true" -a " $BUILD_RESULT " == 0 ]; then
36+ source " $BUILD_DIR /post_build.sh"
37+ fi
38+ }
39+
40+ GetGcc () {
41+ GCC_SRC=" $GCC_ARM_VER -$MACHINE -linux.tar.bz"
42+ wget -q https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2020q2/$GCC_SRC -O - | tar -xj -C $TOOLS_DIR /
43+ }
44+
45+ GetMcuBoot () {
46+ git clone https://github.com/JuulLabs-OSS/mcuboot.git " $TOOLS_DIR /mcuboot"
47+ pip3 install -r " $TOOLS_DIR /mcuboot/scripts/requirements.txt"
48+ }
49+
50+ GetNrfSdk () {
51+ wget -q " https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v15.x.x/$NRF_SDK_VER .zip" -O /tmp/$NRF_SDK_VER
52+ unzip -q /tmp/$NRF_SDK_VER -d " $TOOLS_DIR /"
53+ rm /tmp/$NRF_SDK_VER
54+ }
55+
56+ CmakeGenerate () {
57+ # We can swap the CD and trailing SOURCES_DIR for -B and -S respectively
58+ # once we go to newer CMake (Ubuntu 18.10 gives us CMake 3.10)
59+ cd " $BUILD_DIR "
60+
61+ cmake -G " Unix Makefiles" \
62+ -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
63+ -DUSE_OPENOCD=1 \
64+ -DARM_NONE_EABI_TOOLCHAIN_PATH=" $TOOLS_DIR /$GCC_ARM_VER " \
65+ -DNRF5_SDK_PATH=" $TOOLS_DIR /$NRF_SDK_VER " \
66+ " $SOURCES_DIR "
67+ cmake -L -N .
68+ }
69+
70+ CmakeBuild () {
71+ local target=" $1 "
72+ [[ -n " $target " ]] && target=" --target $target "
73+ if cmake --build " $BUILD_DIR " --config $BUILD_TYPE $target -- -j$( nproc)
74+ then return 0; else return 1;
75+ fi
76+ }
77+
78+ [[ $SOURCED == " false" ]] && main " $@ " || echo " Sourced!"
0 commit comments