InfiniTime.git

commit f197a3fe883cb7ebc028d4cfab199a4d998b125a

Author: JF <jf@codingfield.com>

All output files (bin, hex, image, dfu) contain the version of the project in their filename.
Update Docker build script accordingly.
Also fix permission issue with docker build (all files belonged to root).

 .gitignore | 1 +
 CMakeLists.txt | 1 +
 doc/buildWithDocker.md | 4 ++--
 docker/arm64/Dockerfile | 9 ++++++++-
 docker/build.sh | 25 -------------------------
 docker/build.sh.in | 23 +++++++++++++++++++++++
 docker/x86_64/Dockerfile | 9 ++++++++-
 src/CMakeLists.txt | 41 +++++++++++++++++++++++++----------------


diff --git a/.gitignore b/.gitignore
index cb21cf34dc7061bc178b20a24dc98766e86ce295..f21089e358ab21b05fd8a1979b6c4ffdf3c4e6dd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@ cmake-build-*
 core
 sdk
 src/Version.h
+docker/build.sh




diff --git a/CMakeLists.txt b/CMakeLists.txt
index e33040c392db19ef516febbb8851e14a075867f6..4f2356f851662b14591ab8977c205c84df62b458 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -66,4 +66,5 @@
 set(VERSION_EDIT_WARNING "// Do not edit this file, it is automatically generated by CMAKE!")
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/Version.h.in ${CMAKE_CURRENT_SOURCE_DIR}/src/Version.h)
 
+
 add_subdirectory(src)




diff --git a/doc/buildWithDocker.md b/doc/buildWithDocker.md
index 5101c95c01a84ba7810919873ddc8fcc410b66f7..705c6d99171d16ccf68f3af2f3b1f33471f46c12 100644
--- a/doc/buildWithDocker.md
+++ b/doc/buildWithDocker.md
@@ -6,12 +6,12 @@ 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/
+docker image build -t infinitime-build --build-arg USER_ID=$(id -u) --build-arg GROUP_ID=$(id -g) 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/
+docker image build -t infinitime-build --build-arg USER_ID=$(id -u) --build-arg GROUP_ID=$(id -g) 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.




diff --git a/docker/arm64/Dockerfile b/docker/arm64/Dockerfile
index d9157d0507d16e1a888e9c877f3926650928faba..87c5c627c2199e26155aa6bf386eebf7cca0b2e8 100644
--- a/docker/arm64/Dockerfile
+++ b/docker/arm64/Dockerfile
@@ -1,4 +1,11 @@
 FROM ubuntu:18.04
+
+ARG USER_ID
+ARG GROUP_ID
+
+RUN addgroup --gid $GROUP_ID user
+RUN adduser --disabled-password --gecos '' --uid $USER_ID --gid $GROUP_ID user
+
 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
@@ -6,5 +13,5 @@
 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
 
-
+USER user
 CMD ["/sources/docker/build.sh"]




diff --git a/docker/build.sh b/docker/build.sh
deleted file mode 100755
index 233ae64e6e010b6dee857a53706f7cf777f31658..0000000000000000000000000000000000000000
--- a/docker/build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/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/build.sh.in b/docker/build.sh.in
new file mode 100755
index 0000000000000000000000000000000000000000..a5940e73678df484abf87c7fd8312aab19c5c8b3
--- /dev/null
+++ b/docker/build.sh.in
@@ -0,0 +1,23 @@
+#!/bin/sh
+export LC_ALL=C.UTF-8
+export LANG=C.UTF-8
+set -x
+
+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$(nproc)
+
+mkdir -p /sources/build/output
+/opt/mcuboot/scripts/imgtool.py create --align 4 --version 1.0.0 --header-size 32 --slot-size 475136 --pad-header /sources/build/src/@EXECUTABLE_MCUBOOT_FILE_NAME@.bin /sources/build/output/@IMAGE_MCUBOOT_FILE_NAME@
+adafruit-nrfutil dfu genpkg --dev-type 0x0052 --application /sources/build/output/@IMAGE_MCUBOOT_FILE_NAME@ /sources/build/output/@DFU_FILE_NAME@
+
+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
index 6dd604bed4ec2b538e275e474fe956676699eb46..7899c8ccd6fbb4209868fc7875a972f5a270881c 100644
--- a/docker/x86_64/Dockerfile
+++ b/docker/x86_64/Dockerfile
@@ -1,4 +1,11 @@
 FROM ubuntu:18.04
+
+ARG USER_ID
+ARG GROUP_ID
+
+RUN addgroup --gid $GROUP_ID user
+RUN adduser --disabled-password --gecos '' --uid $USER_ID --gid $GROUP_ID user
+
 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
@@ -6,5 +13,5 @@
 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
 
-
+USER user
 CMD ["/sources/docker/build.sh"]
\ No newline at end of file




diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index d5b4e1beddc031fa06f13420c2f4ad7802a7f597..9bd81842ab6b52f0b1ccaed644b01c9beba33fa1 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -595,8 +595,10 @@     )
 
 # Build autonomous binary (without support for bootloader)
 set(EXECUTABLE_NAME "pinetime-app")
+set(EXECUTABLE_FILE_NAME ${EXECUTABLE_NAME}-${pinetime_VERSION_MAJOR}.${pinetime_VERSION_MINOR}.${pinetime_VERSION_PATCH})
 set(NRF5_LINKER_SCRIPT "${CMAKE_SOURCE_DIR}/gcc_nrf52.ld")
 add_executable(${EXECUTABLE_NAME} ${SOURCE_FILES})
+set_target_properties(${EXECUTABLE_NAME}  PROPERTIES OUTPUT_NAME ${EXECUTABLE_FILE_NAME})
 target_link_libraries(${EXECUTABLE_NAME} nimble nrf-sdk lvgl)
 target_compile_options(${EXECUTABLE_NAME} PUBLIC
         $<$<AND:$<COMPILE_LANGUAGE:C>,$<CONFIG:DEBUG>>: ${COMMON_FLAGS} -O0 -g3>
@@ -608,25 +610,28 @@ )
 
 set_target_properties(${EXECUTABLE_NAME} PROPERTIES
         SUFFIX ".out"
-        LINK_FLAGS "-mthumb -mabi=aapcs -std=gnu++98 -std=c99 -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_NAME}.map"
+        LINK_FLAGS "-mthumb -mabi=aapcs -std=gnu++98 -std=c99 -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_FILE_NAME}.map"
         CXX_STANDARD 11
         C_STANDARD 99
         )
 
 add_custom_command(TARGET ${EXECUTABLE_NAME}
         POST_BUILD
-        COMMAND ${CMAKE_SIZE_UTIL} ${EXECUTABLE_NAME}.out
-        COMMAND ${CMAKE_OBJCOPY} -O binary ${EXECUTABLE_NAME}.out "${EXECUTABLE_NAME}.bin"
-        COMMAND ${CMAKE_OBJCOPY} -O ihex ${EXECUTABLE_NAME}.out "${EXECUTABLE_NAME}.hex"
-        COMMENT "post build steps for ${EXECUTABLE_NAME}")
+        COMMAND ${CMAKE_SIZE_UTIL} ${EXECUTABLE_FILE_NAME}.out
+        COMMAND ${CMAKE_OBJCOPY} -O binary ${EXECUTABLE_FILE_NAME}.out "${EXECUTABLE_FILE_NAME}.bin"
+        COMMAND ${CMAKE_OBJCOPY} -O ihex ${EXECUTABLE_FILE_NAME}.out "${EXECUTABLE_FILE_NAME}.hex"
+        COMMENT "post build steps for ${EXECUTABLE_FILE_NAME}")
 
 
 # Build binary intended to be used by bootloader
 set(EXECUTABLE_MCUBOOT_NAME "pinetime-mcuboot-app")
-set(EXECUTABLE_MCUBOOT_WITH_BOOTLOADER_NAME "pinetime-mcuboot-app-wth-bootloader")
+set(EXECUTABLE_MCUBOOT_FILE_NAME ${EXECUTABLE_MCUBOOT_NAME}-${pinetime_VERSION_MAJOR}.${pinetime_VERSION_MINOR}.${pinetime_VERSION_PATCH})
+set(IMAGE_MCUBOOT_FILE_NAME image-${pinetime_VERSION_MAJOR}.${pinetime_VERSION_MINOR}.${pinetime_VERSION_PATCH}.bin)
+set(DFU_FILE_NAME dfu-${pinetime_VERSION_MAJOR}.${pinetime_VERSION_MINOR}.${pinetime_VERSION_PATCH}.zip)
 set(NRF5_LINKER_SCRIPT_MCUBOOT "${CMAKE_SOURCE_DIR}/gcc_nrf52-mcuboot.ld")
 add_executable(${EXECUTABLE_MCUBOOT_NAME} ${SOURCE_FILES})
 target_link_libraries(${EXECUTABLE_MCUBOOT_NAME} nimble nrf-sdk lvgl)
+set_target_properties(${EXECUTABLE_MCUBOOT_NAME}  PROPERTIES OUTPUT_NAME ${EXECUTABLE_MCUBOOT_FILE_NAME})
 target_compile_options(${EXECUTABLE_MCUBOOT_NAME} PUBLIC
         $<$<AND:$<COMPILE_LANGUAGE:C>,$<CONFIG:DEBUG>>: ${COMMON_FLAGS} -O0 -g3>
         $<$<AND:$<COMPILE_LANGUAGE:C>,$<CONFIG:RELEASE>>: ${COMMON_FLAGS} -O3>
@@ -637,23 +642,25 @@         )
 
 set_target_properties(${EXECUTABLE_MCUBOOT_NAME} PROPERTIES
         SUFFIX ".out"
-        LINK_FLAGS "-mthumb -mabi=aapcs -std=gnu++98 -std=c99 -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT_MCUBOOT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_MCUBOOT_NAME}.map"
+        LINK_FLAGS "-mthumb -mabi=aapcs -std=gnu++98 -std=c99 -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT_MCUBOOT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_MCUBOOT_FILE_NAME}.map"
         CXX_STANDARD 11
         C_STANDARD 99
         )
 
 add_custom_command(TARGET ${EXECUTABLE_MCUBOOT_NAME}
         POST_BUILD
-        COMMAND ${CMAKE_SIZE_UTIL} ${EXECUTABLE_MCUBOOT_NAME}.out
-        COMMAND ${CMAKE_OBJCOPY} -O binary ${EXECUTABLE_MCUBOOT_NAME}.out "${EXECUTABLE_MCUBOOT_NAME}.bin"
-        COMMAND ${CMAKE_OBJCOPY} -O ihex ${EXECUTABLE_MCUBOOT_NAME}.out "${EXECUTABLE_MCUBOOT_NAME}.hex"
-        COMMENT "post build steps for ${EXECUTABLE_MCUBOOT_NAME}"
+        COMMAND ${CMAKE_SIZE_UTIL} ${EXECUTABLE_MCUBOOT_FILE_NAME}.out
+        COMMAND ${CMAKE_OBJCOPY} -O binary ${EXECUTABLE_MCUBOOT_FILE_NAME}.out "${EXECUTABLE_MCUBOOT_FILE_NAME}.bin"
+        COMMAND ${CMAKE_OBJCOPY} -O ihex ${EXECUTABLE_MCUBOOT_FILE_NAME}.out "${EXECUTABLE_MCUBOOT_FILE_NAME}.hex"
+        COMMENT "post build steps for ${EXECUTABLE_MCUBOOT_FILE_NAME}"
 )
 
 # Build binary that writes the graphic assets for the bootloader
 set(EXECUTABLE_GRAPHICS_NAME "pinetime-graphics")
+set(EXECUTABLE_GRAPHICS_FILE_NAME ${EXECUTABLE_GRAPHICS_NAME}-${pinetime_VERSION_MAJOR}.${pinetime_VERSION_MINOR}.${pinetime_VERSION_PATCH})
 add_executable(${EXECUTABLE_GRAPHICS_NAME} ${GRAPHICS_SOURCE_FILES})
 target_link_libraries(${EXECUTABLE_GRAPHICS_NAME} nrf-sdk)
+set_target_properties(${EXECUTABLE_GRAPHICS_NAME}  PROPERTIES OUTPUT_NAME ${EXECUTABLE_GRAPHICS_FILE_NAME})
 target_compile_options(${EXECUTABLE_GRAPHICS_NAME} PUBLIC
     $<$<AND:$<COMPILE_LANGUAGE:C>,$<CONFIG:DEBUG>>: ${COMMON_FLAGS} -O0 -g3>
     $<$<AND:$<COMPILE_LANGUAGE:C>,$<CONFIG:RELEASE>>: ${COMMON_FLAGS} -O3>
@@ -664,17 +671,17 @@     )
 
 set_target_properties(${EXECUTABLE_GRAPHICS_NAME} PROPERTIES
     SUFFIX ".out"
-    LINK_FLAGS "-mthumb -mabi=aapcs -std=gnu++98 -std=c99 -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_GRAPHICS_NAME}.map"
+    LINK_FLAGS "-mthumb -mabi=aapcs -std=gnu++98 -std=c99 -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_GRAPHICS_FILE_NAME}.map"
     CXX_STANDARD 11
     C_STANDARD 99
     )
 
 add_custom_command(TARGET ${EXECUTABLE_GRAPHICS_NAME}
     POST_BUILD
-    COMMAND ${CMAKE_SIZE_UTIL} ${EXECUTABLE_GRAPHICS_NAME}.out
-    COMMAND ${CMAKE_OBJCOPY} -O binary ${EXECUTABLE_GRAPHICS_NAME}.out "${EXECUTABLE_GRAPHICS_NAME}.bin"
-    COMMAND ${CMAKE_OBJCOPY} -O ihex ${EXECUTABLE_GRAPHICS_NAME}.out "${EXECUTABLE_GRAPHICS_NAME}.hex"
-    COMMENT "post build steps for ${EXECUTABLE_GRAPHICS_NAME}"
+    COMMAND ${CMAKE_SIZE_UTIL} ${EXECUTABLE_GRAPHICS_FILE_NAME}.out
+    COMMAND ${CMAKE_OBJCOPY} -O binary ${EXECUTABLE_GRAPHICS_FILE_NAME}.out "${EXECUTABLE_GRAPHICS_FILE_NAME}.bin"
+    COMMAND ${CMAKE_OBJCOPY} -O ihex ${EXECUTABLE_GRAPHICS_FILE_NAME}.out "${EXECUTABLE_GRAPHICS_FILE_NAME}.hex"
+    COMMENT "post build steps for ${EXECUTABLE_GRAPHICS_FILE_NAME}"
     )
 
 # FLASH
@@ -713,3 +720,5 @@             COMMENT "flashing ${EXECUTABLE_NAME}.hex"
             )
 
 endif()
+
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../docker/build.sh.in ${CMAKE_CURRENT_SOURCE_DIR}/../docker/build.sh)