# 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)
i f e q ( $( shell test $ ( firstword $ ( subst ., ,$ ( MAKE_VERSION ) ) ) -ge 4; echo $ $ ?) , 0 )
MAKEFLAGS += --output-sync= target
e l s e
_using_old_make = 1
e n d i f
i n c l u d e $( dir $ ( abspath $ ( lastword $ ( MAKEFILE_LIST ) ) ) ) / e t c / m a k e f i l e s / a r d u i n o - c l i . m k
# 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
i f n e q ( $( TEST_PATH ) , )
TEST_PATH_ARG = " TEST_PATH=' $( TEST_PATH) ' "
e n d i f
.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 :
i f n e q ( $( _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)
e n d i f
$( 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 ; if [ -d ./plugins ] ; then find ./plugins -type f -path '*/examples/*/*.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