171 lines
5.4 KiB
171 lines
5.4 KiB
# Reset a bunch of historical GNU make implicit rules that we never
|
|
# use, but which have a disastrous impact on performance
|
|
#
|
|
# --no-builtin-rules in MAKEFLAGS apparently came in with GNU Make 4,
|
|
# which is newer than what Apple ships
|
|
MAKEFLAGS += --no-builtin-rules
|
|
|
|
# These lines reset the implicit rules we really care about
|
|
%:: %,v
|
|
|
|
%:: RCS/%,v
|
|
|
|
%:: RCS/%
|
|
|
|
%:: s.%
|
|
|
|
%:: SCCS/s.%
|
|
|
|
.SUFFIXES:
|
|
|
|
# GNU Make earlier than 4.0 don't have the output-sync option, but we need it
|
|
# to make parallel simulator test output readable. (otherwise it gets interleaved)
|
|
ifeq ($(shell test $(firstword $(subst ., ,$(MAKE_VERSION))) -ge 4; echo $$?),0)
|
|
MAKEFLAGS+=--output-sync=target
|
|
else
|
|
_using_old_make=1
|
|
endif
|
|
|
|
include $(dir $(abspath $(lastword $(MAKEFILE_LIST))))/etc/makefiles/arduino-cli.mk
|
|
|
|
# Set up an argument for passing to the simulator tests in docker
|
|
# but if the var isn't set, don't even pass the definition
|
|
# since this messes with downstream makefiles
|
|
|
|
ifneq ($(TEST_PATH),)
|
|
TEST_PATH_ARG="TEST_PATH='$(TEST_PATH)'"
|
|
endif
|
|
|
|
.DEFAULT_GOAL := smoke-sketches
|
|
|
|
.PHONY: setup
|
|
setup: $(ARDUINO_CLI_PATH) $(ARDUINO_DIRECTORIES_DATA)/arduino-cli.yaml install-arduino-core-avr install-arduino-core-kaleidoscope checkout-platform prepare-virtual
|
|
@:
|
|
|
|
.PHONY: checkout-platform
|
|
checkout-platform: $(ARDUINO_DIRECTORIES_USER)/hardware/keyboardio/avr/boards.txt
|
|
@:
|
|
|
|
$(ARDUINO_DIRECTORIES_USER)/hardware/keyboardio/avr/boards.txt:
|
|
git clone -c core.symlinks=true \
|
|
--recurse-submodules \
|
|
--shallow-submodules \
|
|
--recurse-submodules=':(exclude)avr/bootloaders' \
|
|
--recurse-submodules=':(exclude)avr/libraries/Kaleidoscope' \
|
|
https://github.com/keyboardio/Kaleidoscope-Bundle-Keyboardio \
|
|
$(ARDUINO_DIRECTORIES_USER)/hardware/keyboardio
|
|
git clone -c core.symlinks=true \
|
|
--recurse-submodules \
|
|
--shallow-submodules \
|
|
--recurse-submodules=':(exclude)libraries/Kaleidoscope' \
|
|
https://github.com/keyboardio/ArduinoCore-GD32-Keyboardio $(ARDUINO_DIRECTORIES_USER)/hardware/keyboardio/gd32
|
|
|
|
.PHONY: prepare-virtual
|
|
prepare-virtual: $(ARDUINO_DIRECTORIES_USER)/hardware/keyboardio/virtual/boards.txt
|
|
@:
|
|
|
|
$(ARDUINO_DIRECTORIES_USER)/hardware/keyboardio/virtual/boards.txt:
|
|
$(MAKE) -C $(ARDUINO_DIRECTORIES_USER)/hardware/keyboardio prepare-virtual
|
|
|
|
.PHONY: update
|
|
update:
|
|
cd $(ARDUINO_DIRECTORIES_USER)/hardware/keyboardio; git pull; \
|
|
git submodule update --init --recursive
|
|
cd $(ARDUINO_DIRECTORIES_USER)/hardware/keyboardio/gd32; git pull; \
|
|
git submodule update --init --recursive
|
|
|
|
.PHONY: simulator-tests
|
|
simulator-tests:
|
|
ifneq ($(_using_old_make),)
|
|
$(info You're using an older version of GNU Make that doesn't offer the --output-sync option. If you're running the test suite in parallel, output may be garbled. You might consider using GNU Make 4.0 or later instead)
|
|
endif
|
|
$(MAKE) -C tests all
|
|
|
|
.PHONY: docker-simulator-tests
|
|
docker-simulator-tests:
|
|
ARDUINO_DIRECTORIES_USER="$(ARDUINO_DIRECTORIES_USER)" ./bin/run-docker "make simulator-tests $(TEST_PATH_ARG)"
|
|
|
|
.PHONY: docker-clean
|
|
docker-clean:
|
|
_NO_SYNC_KALEIDOSCOPE=1 ARDUINO_DIRECTORIES_USER="$(ARDUINO_DIRECTORIES_USER)" ./bin/run-docker "rm -rf -- testing/googletest/build/* _build/* /kaleidoscope-persist/temp/*"
|
|
|
|
.PHONY: docker-bash
|
|
docker-bash:
|
|
_NO_SYNC_KALEIDOSCOPE=1 DOCKER_LIVE_KALEIDOSCOPE_DIR=1 ARDUINO_DIRECTORIES_USER="$(ARDUINO_DIRECTORIES_USER)" ./bin/run-docker "bash"
|
|
|
|
build-gtest-gmock:
|
|
(cd testing/googletest && cmake -H. -Bbuild -DCMAKE_C_COMPILER=$(call _arduino_prop,compiler.path)$(call _arduino_prop,compiler.c.cmd) -DCMAKE_CXX_COMPILER=$(call _arduino_prop,compiler.path)$(call _arduino_prop,compiler.cpp.cmd) .)
|
|
$(MAKE) -C testing/googletest
|
|
|
|
.PHONY: find-filename-conflicts
|
|
find-filename-conflicts:
|
|
bin/find-filename-conflicts.py src plugins/*
|
|
|
|
.PHONY: format
|
|
format:
|
|
bin/format-code.py \
|
|
--exclude-dir 'testing/googletest' \
|
|
--exclude-file 'generated-testcase.cpp' \
|
|
src plugins examples testing
|
|
|
|
.PHONY: check-code-style
|
|
check-code-style:
|
|
bin/format-code.py \
|
|
--exclude-dir 'testing/googletest' \
|
|
--exclude-file 'generated-testcase.cpp' \
|
|
--check \
|
|
--verbose \
|
|
src plugins examples testing
|
|
|
|
.PHONY: check-includes
|
|
check-includes:
|
|
bin/fix-header-includes
|
|
|
|
.PHONY: check-all-includes
|
|
check-all-includes:
|
|
bin/iwyu.py -v src plugins
|
|
bin/iwyu.py -v \
|
|
-I=$(KALEIDOSCOPE_DIR) \
|
|
-I=$(KALEIDOSCOPE_DIR)/testing/googletest/googlemock/include \
|
|
-I=$(KALEIDOSCOPE_DIR)/testing/googletest/googletest/include \
|
|
testing
|
|
bin/format-code.py -f -v --check \
|
|
--exclude-dir 'testing/googletest' \
|
|
src plugins testing
|
|
|
|
.PHONY: cpplint-noisy
|
|
cpplint-noisy:
|
|
-bin/cpplint.py --config=.cpplint-noisy --recursive src plugins examples
|
|
|
|
.PHONY: cpplint
|
|
cpplint:
|
|
bin/cpplint.py --config=.cpplint --quiet --recursive src plugins examples
|
|
|
|
.PHONY: shellcheck
|
|
shellcheck:
|
|
bin/check-shell-scripts.sh
|
|
|
|
SMOKE_SKETCHES := $(sort $(shell if [ -d ./examples ]; then find ./examples -type f -name \*ino | xargs -n 1 dirname; fi))
|
|
|
|
smoke-sketches: $(SMOKE_SKETCHES)
|
|
@echo "Smoke-tested all the sketches"
|
|
|
|
.PHONY: force
|
|
$(SMOKE_SKETCHES): force
|
|
$(MAKE) -C $@ -f $(KALEIDOSCOPE_ETC_DIR)/makefiles/sketch.mk compile
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
$(MAKE) -C tests clean
|
|
rm -rf -- "testing/googletest/build/*"
|
|
rm -rf -- "_build/*"
|
|
|
|
build-arduino-nightly-package:
|
|
perl bin/build-arduino-package \
|
|
--kaleidoscope-tag=master \
|
|
--version `date +%Y.%-m.%-d%H%M%S` \
|
|
--index-filename-slug=kaleidoscope_master \
|
|
--only-one-platform-revision \
|
|
--push \
|
|
--output-repo=ssh://git@github.com/keyboardio/arduino-kaleidoscope-master
|