You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

142 lines
4.2 KiB

SHELL=/bin/bash
.PHONY: all build build-container cmake format format-linux flash-stlink flash-jlink format-container shell image build-container clean clean-image clean-all
############################### Native Makefile ###############################
PROJECT_NAME ?= Probe
BUILD_DIR ?= build
FIRMWARE := $(BUILD_DIR)/$(PROJECT_NAME).bin
BUILD_TYPE ?= Debug
PLATFORM = $(if $(OS),$(OS),$(shell uname -s))
ifeq ($(PLATFORM),Windows_NT)
BUILD_SYSTEM ?= MinGW Makefiles
else
ifeq ($(PLATFORM),Linux)
BUILD_SYSTEM ?= Unix Makefiles
else
@echo "Unsuported platform"
exit 1
endif
endif
all: build
build: cmake
$(MAKE) -C $(BUILD_DIR) --no-print-directory
cmake: $(BUILD_DIR)/Makefile
$(BUILD_DIR)/Makefile: CMakeLists.txt
cmake \
-G "$(BUILD_SYSTEM)" \
-B$(BUILD_DIR) \
-DPROJECT_NAME=$(PROJECT_NAME) \
-DCMAKE_BUILD_TYPE=$(BUILD_TYPE) \
-DDUMP_ASM=OFF
# Formats all user modified source files (add ones that are missing)
# SRCS := $(shell find Project -name '*.[ch]' -or -name '*.[ch]pp') Core/Src/main.c
SRCS := $(shell find Core -name '*.[ch]' -or -name '*.[ch]pp') Core/Src/main.c
format: $(addsuffix .format,$(SRCS))
%.format: %
clang-format -i $<
# Formats all CubeMX generated sources to unix style - removes \r from line endings
# Add any new directories, like Middlewares and hidden files
HIDDEN_FILES := .mxproject .project .cproject
FOUND_HIDDEN_FILES := $(shell for f in $(HIDDEN_FILES);do if [[ -e $$f ]]; then echo $$f;fi; done)
FORMAT_LINUX := $(shell find Core Drivers -name '*' -type f; find . -name '*.ioc') $(FOUND_HIDDEN_FILES)
format-linux: $(addsuffix .format-linux,$(FORMAT_LINUX))
%.format-linux: %
$(if $(filter $(PLATFORM),Linux),dos2unix -q $<,)
# Device specific!
DEVICE ?= STM32F407VG
flash-st: build
st-flash --reset write $(FIRMWARE) 0x08000000
$(BUILD_DIR)/jlink-script:
touch $@
@echo device $(DEVICE) > $@
@echo si 1 >> $@
@echo speed 4000 >> $@
@echo loadfile $(FIRMWARE),0x08000000 >> $@
@echo -e "r\ng\nqc" >> $@
flash-jlink: build | $(BUILD_DIR)/jlink-script
JLinkExe -commanderScript $(BUILD_DIR)/jlink-script
clean:
rm -rf $(BUILD_DIR) doc
################################## Container ##################################
UID ?= $(shell id -u)
GID ?= $(shell id -g)
USER ?= $(shell id -un)
GROUP ?= $(if $(filter $(PLATFORM), Windows_NT),$(shell id -un),$(shell id -gn))
ifeq ($(PLATFORM),Windows_NT)
WIN_PREFIX = winpty
WORKDIR_PATH = "//workdir"
WORKDIR_VOLUME = "/$$(pwd -W):/workdir"
else
WORKDIR_PATH = /workdir
WORKDIR_VOLUME = "$$(pwd):/workdir"
endif
CONTAINER_TOOL ?= docker
CONTAINER_FILE := Dockerfile
IMAGE_NAME := fedora-arm-embedded-dev
CONTAINER_NAME := fedora-arm-embedded-dev
NEED_IMAGE = $(shell $(CONTAINER_TOOL) image inspect $(IMAGE_NAME) 2> /dev/null > /dev/null || echo image)
# usefull if you have a always running container in the background: NEED_CONTAINER = $(shell $(CONTAINER_TOOL) container inspect $(CONTAINER_NAME) 2> /dev/null > /dev/null || echo container)
PODMAN_ARG = $(if $(filter $(CONTAINER_TOOL), podman),--userns=keep-id,)
CONTAINER_RUN = $(WIN_PREFIX) $(CONTAINER_TOOL) run \
--name $(CONTAINER_NAME) \
--rm \
-it \
$(PODMAN_ARG) \
-v $(WORKDIR_VOLUME) \
-w $(WORKDIR_PATH) \
--security-opt label=disable \
--hostname $(CONTAINER_NAME) \
$(IMAGE_NAME)
build-container: $(NEED_IMAGE)
$(CONTAINER_RUN) bash -lc 'make -j$(shell nproc)'
format-container:
$(CONTAINER_RUN) bash -lc 'make format -j$(shell nproc)'
format-linux-container:
$(CONTAINER_RUN) bash -lc 'make format-linux'
shell:
$(CONTAINER_RUN) bash -l
image: $(CONTAINER_FILE)
$(CONTAINER_TOOL) build \
-t $(IMAGE_NAME) \
-f=$(CONTAINER_FILE) \
--build-arg UID=$(UID) \
--build-arg GID=$(GID) \
--build-arg USERNAME=$(USER) \
--build-arg GROUPNAME=$(GROUP) \
.
clean-image:
$(CONTAINER_TOOL) container rm -f $(CONTAINER_NAME) 2> /dev/null > /dev/null || true
$(CONTAINER_TOOL) image rmi -f $(IMAGE_NAME) 2> /dev/null > /dev/null || true
clean-all: clean clean-image
doc:
doxygen
flash:
openocd -f interface/stlink.cfg -f target/stm32l4x.cfg -c "program build/Probe.bin verify reset exit 0x08000000"