From 70ea31ab7f3fe32e3d21ba0ef1a976be9804561c Mon Sep 17 00:00:00 2001 From: Brett Regnier Date: Wed, 4 Feb 2026 14:40:29 -0700 Subject: [PATCH 1/3] fix building issues with docker --- firmware/mgmt/Makefile | 4 +++- firmware/net/Dockerfile | 2 +- firmware/net/Makefile | 25 ++++++++++++++++++++++--- firmware/ui/Dockerfile | 6 +++--- firmware/ui/Makefile | 24 +++++++++++++++++++++--- 5 files changed, 50 insertions(+), 11 deletions(-) diff --git a/firmware/mgmt/Makefile b/firmware/mgmt/Makefile index 32d2913b..35c5b93d 100644 --- a/firmware/mgmt/Makefile +++ b/firmware/mgmt/Makefile @@ -44,6 +44,8 @@ CUBE_PROGRAMMER_USART_ARGS = -c port=${port} br=${BAUD} P=even db=8 -w ${BUILD_D DOCKER_IMAGE = build-hactar-mgmt mft=compile +CHECK_FILE = $(BUILD_DIR)/$(TARGET)_who.txt +WHO = local ifeq (${PROGRAMMER}, CUBE) ifeq (${OS}, WINDOWS_NT) @@ -245,7 +247,7 @@ docker: echo "Docker image already built - skipping" fi - @docker run --rm -e target=${mft} --privileged \ + @docker run --user $(shell id -u):$(shell id -g) --rm -e target=${mft} --privileged \ -v ${PWD}/..:/project \ -v /dev:/dev \ -it ${DOCKER_IMAGE} diff --git a/firmware/net/Dockerfile b/firmware/net/Dockerfile index 1169792c..1ed6e5d5 100644 --- a/firmware/net/Dockerfile +++ b/firmware/net/Dockerfile @@ -7,4 +7,4 @@ WORKDIR /project/net ENV target=compile -CMD ["sh", "-c", "make -j $target"] +CMD ["sh", "-c", "make -j $target WHO=docker"] diff --git a/firmware/net/Makefile b/firmware/net/Makefile index 88f757d9..a4d75a95 100755 --- a/firmware/net/Makefile +++ b/firmware/net/Makefile @@ -13,6 +13,9 @@ PROG_ADDR = 0x10000 DOCKER_IMAGE = build-hactar-net mft = compile +CHECK_FILE = $(BUILD_PATH)/$(TARGET)_who.txt +WHO = local + ESP_TOOL_ARGS = --trace --no-stub --port=${port} --baud=${BAUD} write_flash --no-compress \ ${BOOTLOADER_ADDR} ${BUILD_PATH}/bootloader/bootloader.bin \ ${PARITIONS_ADDR} ${BUILD_PATH}/partition_table/partition-table.bin \ @@ -20,7 +23,7 @@ ESP_TOOL_ARGS = --trace --no-stub --port=${port} --baud=${BAUD} write_flash -- all: compile -compile: +compile: check_who_compiled idf.py -B $(BUILD_PATH) build -DCMAKE_POLICY_VERSION_MINIMUM=3.5 upload: compile @@ -35,14 +38,14 @@ upload_esptool: python3 ../../software/hactar-cli/main.py flash --port=${port} --chip="net" --use_external_flasher=true esptool.py ${ESP_TOOL_ARGS} -docker: docker-build +docker: @if ! docker image inspect ${DOCKER_IMAGE} > /dev/null 2>&1; then \ docker build -t ${DOCKER_IMAGE} .; \ else echo "Docker image already built - skipping" fi - @docker run --rm -e target=${mft} --privileged \ + @docker run --user $(shell id -u):$(shell id -g) --rm -e target=${mft} --privileged \ -v ${PWD}/..:/project \ -v /dev:/dev \ -it ${DOCKER_IMAGE} @@ -66,6 +69,22 @@ format: find ../shared -iname "*.c" -or -iname "*.cc" | xargs clang-format -i find ../shared_inc -iname "*.h" -or -iname "*.hh" | xargs clang-format -i +check_who_compiled: + @if [ -f "${CHECK_FILE}" ]; then \ + who=$$(head -n 1 ${CHECK_FILE}); \ + if [ "$$who" != ${WHO} ]; then \ + rm -rf ${BUILD_PATH}; \ + mkdir -p ${BUILD_PATH}; \ + touch ${CHECK_FILE}; \ + echo ${WHO} > ${CHECK_FILE}; \ + fi \ + else \ + rm -rf ${BUILD_PATH}; \ + mkdir -p ${BUILD_PATH}; \ + touch ${CHECK_FILE}; \ + echo ${WHO} > ${CHECK_FILE}; \ + fi + clean: rm -rf ${BUILD_PATH} diff --git a/firmware/ui/Dockerfile b/firmware/ui/Dockerfile index 2a284e26..b5f7653a 100644 --- a/firmware/ui/Dockerfile +++ b/firmware/ui/Dockerfile @@ -4,7 +4,7 @@ FROM ubuntu:22.04 LABEL description="Docker image for ui" RUN apt-get update -RUN apt-get install -y build-essential git gcc-arm-none-eabi binutils-arm-none-eabi \ +RUN apt-get install -y cmake build-essential git gcc-arm-none-eabi binutils-arm-none-eabi \ libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib stlink-tools python3 pip RUN pip install pyserial @@ -14,8 +14,8 @@ RUN addgroup --gid 1000 compile_user && \ USER compile_user -WORKDIR /src/ui +WORKDIR /project/ui ENV target=compile -CMD ["sh", "-c", "make -j $target"] +CMD ["sh", "-c", "make -j $target WHO=docker"] diff --git a/firmware/ui/Makefile b/firmware/ui/Makefile index 41626bda..ef71ebe8 100644 --- a/firmware/ui/Makefile +++ b/firmware/ui/Makefile @@ -44,6 +44,8 @@ CUBE_PROGRAMMER_ARGS = -c port=${port} br=${BAUD} P=even db=8 -w ${BUILD_DIR}/${ DOCKER_IMAGE = build-hactar-ui mft=compile +CHECK_FILE = $(BUILD_DIR)/$(TARGET)_who.txt +WHO = local OCD_DIR = /usr/share/openocd/scripts OCDFLAGS = -f interface/stlink.cfg -f target/stm32f4x.cfg @@ -53,7 +55,7 @@ OCDFLAGS = -f interface/stlink.cfg -f target/stm32f4x.cfg # default action: build all all: info compile -compile: CMakeLists.txt +compile: check_who_compiled CMakeLists.txt cmake -B $(BUILD_DIR) cmake --build $(BUILD_DIR) -j @@ -79,11 +81,27 @@ docker: echo "Docker image already built - skipping" fi - @docker run --rm -e target=${mft} --privileged \ - -v ${PWD}/..:/src \ + @docker run --user $(shell id -u):$(shell id -g) --rm -e target=${mft} --privileged \ + -v ${PWD}/..:/project \ -v /dev:/dev \ -it ${DOCKER_IMAGE} +check_who_compiled: + @if [ -f "${CHECK_FILE}" ]; then \ + who=$$(head -n 1 ${CHECK_FILE}); \ + if [ "$$who" != ${WHO} ]; then \ + rm -rf ${BUILD_DIR}; \ + mkdir -p ${BUILD_DIR}; \ + touch ${CHECK_FILE}; \ + echo ${WHO} > ${CHECK_FILE}; \ + fi \ + else \ + rm -rf ${BUILD_DIR}; \ + mkdir -p ${BUILD_DIR}; \ + touch ${CHECK_FILE}; \ + echo ${WHO} > ${CHECK_FILE}; \ + fi + dirs: ${BUILD_DIR} ${BUILD_DIR}: @echo "[MKDIR] $@" From 7fc60d445b9020d9ee10019de94eb662b5ea3ccf Mon Sep 17 00:00:00 2001 From: Brett Regnier Date: Wed, 4 Feb 2026 16:07:09 -0700 Subject: [PATCH 2/3] fixed docker image check for macos --- firmware/mgmt/Makefile | 2 -- firmware/net/Makefile | 2 -- firmware/ui/Makefile | 2 -- 3 files changed, 6 deletions(-) diff --git a/firmware/mgmt/Makefile b/firmware/mgmt/Makefile index 35c5b93d..5b60d08b 100644 --- a/firmware/mgmt/Makefile +++ b/firmware/mgmt/Makefile @@ -243,8 +243,6 @@ upload_cube_swd: compile docker: @if ! docker image inspect ${DOCKER_IMAGE} > /dev/null 2>&1; then \ docker build -t ${DOCKER_IMAGE} .; \ - else - echo "Docker image already built - skipping" fi @docker run --user $(shell id -u):$(shell id -g) --rm -e target=${mft} --privileged \ diff --git a/firmware/net/Makefile b/firmware/net/Makefile index a4d75a95..7f464c5d 100755 --- a/firmware/net/Makefile +++ b/firmware/net/Makefile @@ -41,8 +41,6 @@ upload_esptool: docker: @if ! docker image inspect ${DOCKER_IMAGE} > /dev/null 2>&1; then \ docker build -t ${DOCKER_IMAGE} .; \ - else - echo "Docker image already built - skipping" fi @docker run --user $(shell id -u):$(shell id -g) --rm -e target=${mft} --privileged \ diff --git a/firmware/ui/Makefile b/firmware/ui/Makefile index ef71ebe8..802b41e8 100644 --- a/firmware/ui/Makefile +++ b/firmware/ui/Makefile @@ -77,8 +77,6 @@ upload_cube_swd: compile docker: @if ! docker image inspect ${DOCKER_IMAGE} > /dev/null 2>&1; then \ docker build -t ${DOCKER_IMAGE} .; \ - else - echo "Docker image already built - skipping" fi @docker run --user $(shell id -u):$(shell id -g) --rm -e target=${mft} --privileged \ From 6b7253dd7e58774af43d6f364604fde5d79fa7bc Mon Sep 17 00:00:00 2001 From: Brett Regnier Date: Thu, 5 Feb 2026 10:06:18 -0700 Subject: [PATCH 3/3] added option to detect macos and change the docker command --- firmware/mgmt/Makefile | 15 +++++++++++---- firmware/net/Makefile | 15 +++++++++++---- firmware/ui/Makefile | 15 +++++++++++---- 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/firmware/mgmt/Makefile b/firmware/mgmt/Makefile index 5b60d08b..17518413 100644 --- a/firmware/mgmt/Makefile +++ b/firmware/mgmt/Makefile @@ -245,10 +245,17 @@ docker: docker build -t ${DOCKER_IMAGE} .; \ fi - @docker run --user $(shell id -u):$(shell id -g) --rm -e target=${mft} --privileged \ - -v ${PWD}/..:/project \ - -v /dev:/dev \ - -it ${DOCKER_IMAGE} + @if [ "$(shell uname -s)" = "Darwin" ]; then \ + docker run --rm -e target=${mft} --privileged \ + -v ${PWD}/..:/project \ + -v /dev:/dev \ + -it ${DOCKER_IMAGE}; \ + else \ + docker run --user $(shell id -u):$(shell id -g) --rm -e target=${mft} --privileged \ + -v ${PWD}/..:/project \ + -v /dev:/dev \ + -it ${DOCKER_IMAGE}; \ + fi monitor: python3 ../../software/hactar-cli/main.py monitor --port=${port} diff --git a/firmware/net/Makefile b/firmware/net/Makefile index 7f464c5d..2c49e8fc 100755 --- a/firmware/net/Makefile +++ b/firmware/net/Makefile @@ -43,10 +43,17 @@ docker: docker build -t ${DOCKER_IMAGE} .; \ fi - @docker run --user $(shell id -u):$(shell id -g) --rm -e target=${mft} --privileged \ - -v ${PWD}/..:/project \ - -v /dev:/dev \ - -it ${DOCKER_IMAGE} + @if [ "$(shell uname -s)" = "Darwin" ]; then \ + docker run --rm -e target=${mft} --privileged \ + -v ${PWD}/..:/project \ + -v /dev:/dev \ + -it ${DOCKER_IMAGE}; \ + else \ + docker run --user $(shell id -u):$(shell id -g) --rm -e target=${mft} --privileged \ + -v ${PWD}/..:/project \ + -v /dev:/dev \ + -it ${DOCKER_IMAGE}; \ + fi burn_jtag_efuse: python3 ../../software/hactar-cli/main.py flash --port=${port} --chip="net" --use_external_flasher=true diff --git a/firmware/ui/Makefile b/firmware/ui/Makefile index 802b41e8..641f0bee 100644 --- a/firmware/ui/Makefile +++ b/firmware/ui/Makefile @@ -79,10 +79,17 @@ docker: docker build -t ${DOCKER_IMAGE} .; \ fi - @docker run --user $(shell id -u):$(shell id -g) --rm -e target=${mft} --privileged \ - -v ${PWD}/..:/project \ - -v /dev:/dev \ - -it ${DOCKER_IMAGE} + @if [ "$(shell uname -s)" = "Darwin" ]; then \ + docker run --rm -e target=${mft} --privileged \ + -v ${PWD}/..:/project \ + -v /dev:/dev \ + -it ${DOCKER_IMAGE}; \ + else \ + docker run --user $(shell id -u):$(shell id -g) --rm -e target=${mft} --privileged \ + -v ${PWD}/..:/project \ + -v /dev:/dev \ + -it ${DOCKER_IMAGE}; \ + fi check_who_compiled: @if [ -f "${CHECK_FILE}" ]; then \