From: Ian Jackson Date: Sat, 10 Oct 2020 17:08:38 +0000 (+0100) Subject: Much Makefile sorting-out X-Git-Tag: otter-0.2.0~719 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=5a720327e8019027fa5547d3049583b882d57124;p=otter.git Much Makefile sorting-out Signed-off-by: Ian Jackson --- diff --git a/Makefile b/Makefile index e1ef891c..d227d495 100644 --- a/Makefile +++ b/Makefile @@ -10,81 +10,112 @@ SHELL=/bin/bash default: debug +#---------- funky macros etc. ---------- + +cr = $(addprefix --,$(filter-out debug,$1)) + +#---------- programs and config variables ---------- + CARGO ?= cargo CARGO_TARGET_DIR ?= target + USVG ?= usvg USVG_OPTIONS = "--sans-serif-family=DejaVu Sans" +BUNDLE_SOURCES ?= bundle-rust-sources + +DEPLOY_ARCH=x86_64-unknown-linux-musl +DEPLOY_RELEASE=debug +DEPLOY_TARGET_DIR=$(CARGO_TARGET_DIR)/$(addsuffix /,$(DEPLOY_ARCH))$(DEPLOY_RELEASE) + +#---------- nailing-cargo ---------- + ifneq (,$(wildcard(../Cargo.nail))) + NAILING_CARGO = nailing-cargo CARGO = $(NAILING_CARGO) -CARGO_TARGET_DIR = ../Build/$(notdir $(PWD))/target +BUILD_SUBDIR ?= ../Build +CARGO_TARGET_DIR = $(BUILD_SUBDIR)/$(notdir $(PWD))/target -BUNDLE_SOURCES_DIR = ../bundle-sources -BUNDLE_SOURCES = ../Build/bundle-sources/target/debug/bundle-rust-sources +BUNDLE_SOURCES_CMD ?= $(NAILING_CARGO) --- $(BUNDLE_SOURCES) +USVG_CMD ?= $(NAILING_CARGO) --just-run -q --- $(USVG) -USVG_BINARY = ../resvg/target/release/usvg -USVG = $(NAILING_CARGO) --just-run -q --- $(USVG_BINARY) -# To build usvg -# zealot:resvg$ nailing-cargo build -p usvg --release +endif # Cargo.nail -ifneq (,$(wildcard $(BUNDLE_SOURCES_DIR))) -$(BUNDLE_SOURCES): - cd ../bundle-sources && $(CARGO) build -.PHONY: $(BUNDLE_SOURCES) -endif -endif +BUILD_SUBDIR ?= ../Build +BUNDLE_SOURCES_CMD ?= $(BUNDLE_SOURCES) +USVG_CMD ?= =$(USVG) -include $(wildcard library/*/files.make) +#---------- local programs ---------- -USVG_PROCESSOR = usvg-processor -LIBRARY_PROCESS_SVG = ./$(USVG_PROCESSOR) $@ $(wordlist 1,2,$^) '$(USVG) $(USVG_OPTIONS)' -$(LIBRARY_FILES): $(USVG_PROCESSOR) Makefile +define lp +$(if $(wildcard $(BUILD_SUBDIR)/$2), +$(shell echo >&2 'Makefile: lp: Using program $4 from $(BUILD_SUBDIR)/$2') +$1 := $(abspath $(BUILD_SUBDIR)/$2/target/$3/$4) +$(abspath $(BUILD_SUBDIR)/$2/target/$3/$4):; cd ../$2 && $$(CARGO) build $(call cr,$3) +) +endef -TS_SRCS= script bigfloat -TS_SRC_FILES= $(addprefix templates/,$(addsuffix .ts,$(TS_SRCS))) +$(eval $(call lp,BUNDLE_SOURCES,bundle-sources,debug,bundle-rust-sources)) +$(eval $(call lp,USVG,resvg,release,usvg)) -LITFILES= LICENCE AGPLv3 -TXTFILES= CC-BY-SA-3.0 CC-BY-SA-4.0 +#---------- variables defining bits of source etc. ---------- -FILEASSETS = $(addprefix templates/,$(LITFILES) $(TXTFILES)) +PROGRAMS=daemon-otter otter -assets: templates/script.js libraries $(FILEASSETS) +FILEASSETS = $(addprefix templates/,$(LITFILES) $(TXTFILES)) -$(addprefix templates/,$(LITFILES)): templates/%: %; - cp $< $@.new && mv -f $@.new $@ +WASM := wasm32-unknown-unknown -$(addprefix templates/,$(TXTFILES)): templates/%: %.txt - cp $< $@.new && mv -f $@.new $@ +#---------- toplevel aggregate targets ---------- -libraries: $(LIBRARY_FILES) +check: cargo/check js-check + @echo 'All tests passed.' -debug release:: %: cargo-% assets extra-% -cargo-debug cargo-release:: cargo-%: $(CARGO_TARGET_DIR)/%/server - @echo Built $@. -.PHONY: $(CARGO_TARGET_DIR)/debug/server -.PHONY: $(CARGO_TARGET_DIR)/release/server +debug release:: %: cargo/% assets extra-% -check: cargo-check js-check - @echo 'All tests passed.' +assets: templates/script.js libraries $(FILEASSETS) extra-debug: extra-release: bundled-sources +#---------- cargo ---------- + +CARGOES=$(foreach t, / /wasm- , \ + $(addprefix $t, , \ + check debug release)) + +.PHONY: $(addprefix cargo, $(CARGOES)) + +cargo/check cargo/debug:: cargo/%:; $(CARGO) test $(call cr,$*) +cargo/wasm-%:; $(CARGO) -TWASM build -p otter-wasm $(call cr,$*) +cargo/deploy-build: $(CARGO) -T$(DEPLOY_ARCH) build $(call cr,$(DEPLOY_RELEASE)) + +#---------- bundle-sources ---------- + bundled-sources: $(CARGO_TARGET_DIR)/bundled-sources $(CARGO_TARGET_DIR)/bundled-sources: $(BUNDLE_SOURCES) - nailing-cargo --- $(abspath $(BUNDLE_SOURCES)) --output $(abspath $@) + $(BUNDLE_SOURCES_CMD) --output $(abspath $@) @echo Bundled sources. .PHONY: bundle-sources $(CARGO_TARGET_DIR)/bundled-sources -cargo-check: - $(CARGO) test +#---------- svg processing ---------- + +include $(wildcard library/*/files.make) + +USVG_PROCESSOR = usvg-processor +LIBRARY_PROCESS_SVG = ./$(USVG_PROCESSOR) $@ $(wordlist 1,2,$^) '$(USVG_CMD) $(USVG_OPTIONS)' +$(LIBRARY_FILES): $(USVG_PROCESSOR) $(USVG_BINARY) Makefile + +# actual command for each of $(LIBRARY_FILES) is in one of the files.make -$(CARGO_TARGET_DIR)/debug/server: - $(CARGO) build +#---------- typescript ---------- + +TS_SRCS= script bigfloat +TS_SRC_FILES= $(addprefix templates/,$(addsuffix .ts,$(TS_SRCS))) -$(CARGO_TARGET_DIR)/release/server: - $(CARGO) build --release +LITFILES= LICENCE AGPLv3 +TXTFILES= CC-BY-SA-3.0 CC-BY-SA-4.0 templates/%.js: tsc-wrap tsconfig.json ./tsc-wrap $@ tsconfig.json $(filter %.ts,$^) @@ -100,26 +131,26 @@ js-check: templates/bigfloat-tests.js nodejs <$< @echo 'nodejs check $< ok' -DEPLOY_ARCH=x86_64-unknown-linux-musl -DEPLOY_RELEASE=debug -DEPLOY_TARGET_DIR=$(CARGO_TARGET_DIR)/$(addsuffix /,$(DEPLOY_ARCH))$(DEPLOY_RELEASE) +#---------- other templates ---------- + +$(addprefix templates/,$(LITFILES)): templates/%: %; + cp $< $@.new && mv -f $@.new $@ -deploy-build: $(DEPLOY_TARGET_DIR)/server -ifneq (,$(DEPLOY_ARCH)) -$(DEPLOY_TARGET_DIR)/server: - $(CARGO) -T$(DEPLOY_ARCH) build $(addprefix --,$(filter-out debug,$(DEPLOY_RELEASE))) - @echo Built $@. -.PHONY: $(DEPLOY_TARGET_DIR)/server -endif +$(addprefix templates/,$(TXTFILES)): templates/%: %.txt + cp $< $@.new && mv -f $@.new $@ -PROGRAMS=daemon-otter otter +libraries: $(LIBRARY_FILES) + +#---------- deployment ---------- DEPLOY_BASE=Otter@login.chiark.greenend.org.uk:/volatile/Otter -deploy: deploy-build bundled-sources +deploy: cargo/deploy-build bundled-sources rsync -zv --progress $(addprefix $(DEPLOY_TARGET_DIR)/,$(PROGRAMS)) $(DEPLOY_BASE)/bin/ rsync -rv --progress $(CARGO_TARGET_DIR)/bundled-sources/. $(DEPLOY_BASE)/bundled-sources +#---------- clean ---------- + clean: rm -f templates/script.js library/*/*.usvg rm -rf target