xref: /sqlite-3.40.0/ext/wasm/dist.make (revision df52a0bc)
1#!/do/not/make
2#^^^ help emacs select edit mode
3#
4# Intended to include'd by ./GNUmakefile.
5#
6# 'make dist' rules for creating a distribution archive of the WASM/JS
7# pieces, noting that we only build a dist of the built files, not the
8# numerous pieces required to build them.
9#######################################################################
10MAKEFILE.dist := $(lastword $(MAKEFILE_LIST))
11
12########################################################################
13# Chicken/egg situation: we need $(bin.version-info) to get the version
14# info for the archive name, but that binary may not yet be built, and
15# won't be built until we expand the dependencies. We have to use a
16# temporary name for the archive.
17dist-name = sqlite-wasm-TEMP
18#ifeq (0,1)
19#  $(info WARNING  *******************************************************************)
20#  $(info ** Be sure to create the desired build configuration before creating the)
21#  $(info ** distribution archive. Use one of the following targets to do so:)
22#  $(info **)
23#  $(info **   o2: builds with -O2, resulting in the fastest builds)
24#  $(info **   oz: builds with -Oz, resulting in the smallest builds)
25#  $(info /WARNING *******************************************************************)
26#endif
27
28########################################################################
29# dist.build must be the name of a target which triggers the
30# build of the files to be packed into the dist archive.  The
31# intention is that it be one of (o0, o1, o2, o3, os, oz), each of
32# which uses like-named -Ox optimization level flags. The o2 target
33# provides the best overall runtime speeds. The oz target provides
34# slightly slower speeds (roughly 10%) with significantly smaller WASM
35# file sizes. Note that -O2 (the o2 target) results in faster binaries
36# than both -O3 and -Os (the o3 and os targets) in all tests run to
37# date.
38dist.build ?= oz
39
40dist-dir.top := $(dist-name)
41dist-dir.jswasm := $(dist-dir.top)/$(notdir $(dir.dout))
42dist-dir.common := $(dist-dir.top)/common
43dist.top.extras := \
44    demo-123.html demo-123-worker.html demo-123.js \
45    tester1.html tester1-worker.html tester1.js \
46    demo-jsstorage.html demo-jsstorage.js \
47    demo-worker1.html demo-worker1.js \
48    demo-worker1-promiser.html demo-worker1-promiser.js
49dist.jswasm.extras := $(sqlite3-api.ext.jses) $(sqlite3.wasm)
50dist.common.extras := \
51    $(wildcard $(dir.common)/*.css) \
52    $(dir.common)/SqliteTestUtil.js
53
54.PHONY: dist
55########################################################################
56# dist: create the end-user deliverable archive.
57#
58# Maintenance reminder: because dist depends on $(dist.build), and
59# $(dist.build) will depend on clean, having any deps on
60# $(dist-archive) which themselves may be cleaned up by the clean
61# target will lead to grief in parallel builds (-j #). Thus
62# $(dist-target)'s deps must be trimmed to non-generated files or
63# files which are _not_ cleaned up by the clean target.
64#
65# Note that we require $(bin.version-info) in order to figure out the
66# dist file's name, so cannot (without a recursive make) have the
67# target name equal to the archive name.
68dist: \
69    $(bin.stripccomments) $(bin.version-info) \
70    $(dist.build) \
71    $(MAKEFILE) $(MAKEFILE.dist)
72	@echo "Making end-user deliverables..."
73	@rm -fr $(dist-dir.top)
74	@mkdir -p $(dist-dir.jswasm) $(dist-dir.common)
75	@cp -p $(dist.top.extras) $(dist-dir.top)
76	@cp -p README-dist.txt $(dist-dir.top)/README.txt
77	@cp -p index-dist.html $(dist-dir.top)/index.html
78	@cp -p $(dist.jswasm.extras) $(dist-dir.jswasm)
79	@$(bin.stripccomments) -k -k < $(sqlite3.js) \
80		> $(dist-dir.jswasm)/$(notdir $(sqlite3.js))
81	@cp -p $(dist.common.extras) $(dist-dir.common)
82	@set -e; \
83		vnum=$$($(bin.version-info) --download-version); \
84		vdir=sqlite-wasm-$$vnum; \
85		arczip=$$vdir.zip; \
86		echo "Making $$arczip ..."; \
87		rm -fr $$arczip $$vdir; \
88		mv $(dist-dir.top) $$vdir; \
89		zip -qr $$arczip $$vdir; \
90		rm -fr $$vdir; \
91		ls -la $$arczip; \
92		set +e; \
93		unzip -lv $$arczip || echo "Missing unzip app? Not fatal."
94
95# We need a separate `clean` rule to account for weirdness in
96# a sub-make, where we get a copy of the $(dist-name) dir
97# copied into the new $(dist-name) dir.
98.PHONY: dist-clean
99clean: dist-clean
100dist-clean:
101	rm -fr $(dist-name) $(wildcard sqlite-wasm-*.zip)
102