diff --git a/firmware/mgmt/Makefile b/firmware/mgmt/Makefile index 32d2913b..17518413 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) @@ -241,14 +243,19 @@ 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 --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/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..2c49e8fc 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,17 +38,22 @@ 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 \ - -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 @@ -66,6 +74,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..641f0bee 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 @@ -75,14 +77,35 @@ 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 --rm -e target=${mft} --privileged \ - -v ${PWD}/..:/src \ - -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 \ + 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}: