# GNUmakefile - Main build script for sbc-harness project # # Copyright (C) 2024 Luke T. Shumaker # SPDX-License-Identifier: AGPL-3.0-or-later # Project configuration ######################################################## linux.git = $(HOME)/src/github.com/torvalds/linux all: build .PHONY: all # Configure GNU Make itself #################################################### ifeq ($(filter notintermediate,$(.FEATURES)),) $(error This $(firstword $(MAKEFILE_LIST)) requies GNU Make 4.4 or later for .NOTINTERMEDIATE) endif .NOTINTERMEDIATE: .DELETE_ON_ERROR: .PHONY: FORCE # `generate` ################################################################### generate/files = generate/files += 3rd-party/linux-errno.txt 3rd-party/linux-errno.txt: build-aux/linux-errno.txt.gen $< $(linux.git) $@ generate/files += lib9p/include/lib9p/linux-errno.h lib9p/include/lib9p/linux-errno.h: %: %.gen 3rd-party/linux-errno.txt $^ >$@ generate/files += lib9p/9p.generated.c lib9p/include/lib9p/9p.generated.h lib9p/9p.generated.c lib9p/include/lib9p/9p.generated.h &: lib9p/idl.gen lib9p/idl/*.9p $^ generate/files += libusb/include/libusb/tusb_helpers.h 3rd-party/MS-LCID.pdf 3rd-party/MS-LCID.txt libusb/include/libusb/tusb_helpers.h 3rd-party/MS-LCID.pdf 3rd-party/MS-LCID.txt &: libusb/include/libusb/tusb_helpers.h.gen $^ generate/files += build-aux/sources.mk build-aux/sources.mk: $(if $(wildcard .git),FORCE) git ls-files | grep -vFx $(foreach f,$(generate/files),-e $f) \ | sed 's,^,$(CURDIR)/,' | xargs editorconfig \ | sed -nE -e 's,\[$(CURDIR)/(.*)\],\1,p' -e 's/^_mode=//p' \ | sed -E '{N;s/(.*)\n(.*)/sources_\2 += \1/;}' \ | sort \ >$@.tmp if ! cmp -s $@.tmp $@; then mv $@.tmp $@; fi generate: $(generate/files) .PHONY: generate generate-clean: rm -f -- $(generate/files) .PHONY: generate-clean # `build` ###################################################################### platforms := $(shell sed -nE 's/if *\(PICO_PLATFORM STREQUAL "(.*)"\)/\1/p' cmd/*/CMakeLists.txt) build: $(foreach p,$(platforms),build/$p/build) .PHONY: build $(foreach p,$(platforms),build/$p/Makefile): build/%/Makefile: mkdir -p $(@D) && cd $(@D) && cmake -DCMAKE_BUILD_TYPE=Debug -DPICO_PLATFORM=$* ../.. $(foreach p,$(platforms),build/$p/build): build/%/build: build/%/Makefile generate $(MAKE) -C $(&2 lint/all: lint/%: $(eval export sources_$*) @find $$(printf '%s\n' $${sources_$*} | grep -vE '^cmd/[^/]+/static/') \ -maxdepth 0 -type f | \ { r=0; while read -r filename; do \ if ! grep -q 'Copyright (C) 2024 Luke T. Shumaker' $$filename; then \ echo "$$filename is missing a copyright statement"; r=1; \ fi; \ if ! grep -q ' SPDX-License-Identifier[:] ' $$filename; then \ echo "$$filename is missing an SPDX-License-Identifier"; r=1; \ fi; \ dscname_act=$$($(get_dscname) $$filename); \ dscname_exp=$$(echo "$$filename" | sed \ -e 's,.*/config/,,' \ -e 's,.*include/,,' \ -e 's,^lib9p/idl/,,' \ -e 's/\.wip$$//'); \ if [ "$$dscname_act" != "$$dscname_exp" ] && [ "cmd/$$dscname_act" != "$$dscname_exp" ]; then \ echo "$$filename self-identifies as $$dscname_act (expected $$dscname_exp)"; r=1; \ fi; \ if grep -n --color=auto "$$(printf '\\S\t')" $$filename; then \ echo "$$filename uses tabs for alignment"; r=1; \ fi; \ done; exit $$r; } .PHONY: lint lint/% # `format` ######### format: $(MAKE) -k $(patsubst sources_%,format/%,$(filter-out sources_all,$(filter sources_%,$(.VARIABLES)))) format/python3: format/%: black $(sources_$*) isort $(sources_$*) format/sh format/bash: format/% @: format/c: format/%: @: TODO format/make format/cmake format/gitignore format/ini format/9p format/markdown: format/%: @: format/unknown: format/%: @: .PHONY: format format/%