146 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			146 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
| .SILENT:
 | |
| 
 | |
| .PHONY: \
 | |
| 	clean-dist \
 | |
| 	devdeps \
 | |
| 	dist \
 | |
| 	dockerbase \
 | |
| 	lint
 | |
| 
 | |
| .DEFAULT: all
 | |
| 
 | |
| DIST_DESCRIBE_CMD = git describe --always --abbrev=0 --dirty --broken
 | |
| 
 | |
| DOCKER_BASE_TAG ?= latest
 | |
| DOCKER_TAG ?= latest
 | |
| 
 | |
| AMPY_PORT ?= /dev/ttyUSB0
 | |
| AMPY_BAUD ?= 115200
 | |
| AMPY_DELAY ?= 1.5
 | |
| PIPENV ?= $(shell which pipenv 2>/dev/null)
 | |
| 
 | |
| MPY_CROSS ?= $(shell which mpy-cross 2>/dev/null)
 | |
| MPY_FLAGS ?= '-O2'
 | |
| MPY_SOURCES ?= 'kmk/'
 | |
| MPY_TARGET_DIR ?= .compiled
 | |
| PY_KMK_TREE = $(shell find $(MPY_SOURCES) -name "*.py")
 | |
| DIST_DESCRIBE = $(shell $(DIST_DESCRIBE_CMD))
 | |
| 
 | |
| TIMESTAMP := $(shell date +%s)
 | |
| 
 | |
| all: copy-kmk copy-bootpy copy-keymap copy-board
 | |
| 
 | |
| .PHONY: compile compile-check
 | |
| compile: compile-check
 | |
| ifeq ($(MPY_CROSS),)
 | |
| compile-check:
 | |
| 	@echo "===> Could not find mpy-cross in PATH, exiting"
 | |
| 	@false
 | |
| else
 | |
| compile-check: $(PY_KMK_TREE:%.py=$(MPY_TARGET_DIR)/%.mpy)
 | |
| 	@echo "===> Compiling all py files to mpy with flags $(MPY_FLAGS)"
 | |
| $(MPY_TARGET_DIR)/%.mpy: %.py
 | |
| 	@mkdir -p $(dir $@)
 | |
| 	@$(MPY_CROSS) $(MPY_FLAGS) $? -o $@
 | |
| endif
 | |
| 
 | |
| .devdeps: Pipfile.lock
 | |
| 	@echo "===> Installing dependencies with pipenv"
 | |
| 	@$(PIPENV) sync --dev
 | |
| 	@touch .devdeps
 | |
| 
 | |
| devdeps: .devdeps
 | |
| 
 | |
| dist: clean-dist dockerbase
 | |
| 	@mkdir -p .dist
 | |
| 	@docker run --rm -it -v $$(pwd)/.dist:/dist kmkpy:$(TIMESTAMP)
 | |
| 
 | |
| dockerbase:
 | |
| 	docker build . \
 | |
| 		-t kmkpy:$(TIMESTAMP) \
 | |
| 		--build-arg KMKPY_URL=$$(cut -f1 < kmkpython_ref.tsv) \
 | |
| 		--build-arg KMKPY_REF=$$(cut -f2 < kmkpython_ref.tsv)
 | |
| 
 | |
| lint: devdeps
 | |
| 	@$(PIPENV) run flake8
 | |
| 
 | |
| fix-formatting: devdeps
 | |
| 	@$(PIPENV) run black .
 | |
| 
 | |
| fix-isort: devdeps
 | |
| 	@find boards/ kmk/ tests/ user_keymaps/ -name "*.py" | xargs $(PIPENV) run isort
 | |
| 
 | |
| clean: clean-dist
 | |
| 	@echo "===> Cleaning build artifacts"
 | |
| 	@rm -rf .devdeps build dist $(MPY_TARGET_DIR)
 | |
| 
 | |
| clean-dist:
 | |
| 	@echo "===> Cleaning KMKPython dists"
 | |
| 	@rm -rf .dist
 | |
| 
 | |
| # This is mostly a leftover from the days we vendored stuff from
 | |
| # micropython-lib via submodules. Leaving this here mostly in case someone goes
 | |
| # exploring through the history of KMK's repo and manages to screw up their
 | |
| # repo state (those were glitchy times...)
 | |
| powerwash: clean
 | |
| 	@echo "===> Removing vendor/ to force a re-pull"
 | |
| 	@rm -rf vendor
 | |
| 	@echo "===> Removing pipenv-managed virtual environment"
 | |
| 	@$(PIPENV) --rm || true
 | |
| 
 | |
| test: lint unit-tests
 | |
| 
 | |
| .PHONY: unit-tests
 | |
| unit-tests: devdeps
 | |
| 	@$(PIPENV) run python3 -m unittest $(TESTS)
 | |
| 
 | |
| reset-bootloader:
 | |
| 	@echo "===> Rebooting your board to bootloader (safe to ignore file not found errors)"
 | |
| 	@-timeout -k 5s 10s $(PIPENV) run ampy -p /dev/ttyACM0 -d ${AMPY_DELAY} -b ${AMPY_BAUD} run util/bootloader.py
 | |
| 
 | |
| reset-board:
 | |
| 	@echo "===> Rebooting your board (safe to ignore file not found errors)"
 | |
| 	@-timeout -k 5s 10s $(PIPENV) run ampy -p /dev/ttyACM0 -d ${AMPY_DELAY} -b ${AMPY_BAUD} run util/reset.py
 | |
| 
 | |
| 
 | |
| ifdef MOUNTPOINT
 | |
| ifdef BOARD
 | |
| copy-board:
 | |
| 	@echo "===> Copying your board from $(BOARD) to $(MOUNTPOINT)"
 | |
| 	@rsync -rhu $(BOARD)/*.py $(MOUNTPOINT)/
 | |
| 	@sync
 | |
| else # BOARD
 | |
| copy-board:
 | |
| 	@echo "**** Missing BOARD argument ****" && exit 1
 | |
| endif # BOARD
 | |
| 
 | |
| copy-bootpy:
 | |
| 	@echo "===> Copying required boot.py"
 | |
| 	@rsync -rhu boot.py $(MOUNTPOINT)/boot.py
 | |
| 	@sync
 | |
| 
 | |
| copy-compiled:
 | |
| 	@echo "===> Copying compiled KMK folder"
 | |
| 	@rsync -rhu $(MPY_TARGET_DIR)/* $(MOUNTPOINT)/
 | |
| 	@sync
 | |
| 
 | |
| ifdef USER_KEYMAP
 | |
| copy-keymap:
 | |
| 	@echo "===> Copying your keymap to main.py"
 | |
| 	@rsync -rhu $(USER_KEYMAP) $(MOUNTPOINT)/main.py
 | |
| 	@sync
 | |
| else # USER_KEYMAP
 | |
| copy-keymap:
 | |
| 	@echo "**** Missing USER_KEYMAP argument ****" && exit 1
 | |
| endif # USER_KEYMAP
 | |
| 
 | |
| copy-kmk:
 | |
| 	@echo "===> Copying KMK source folder"
 | |
| 	@rsync -rhu kmk $(MOUNTPOINT)/
 | |
| 	@sync
 | |
| 
 | |
| else # MOUNTPOINT
 | |
| copy-board copy-bootpy copy-compiled copy-keymap copy-kmk:
 | |
| 	@echo "**** MOUNTPOINT must be defined (wherever your CIRCUITPY drive is mounted) ****" && exit 1
 | |
| endif # ifndef MOUNTPOINT
 |