| 1 | # portable-rules.mk: These are done on the dev machine.
 | 
| 2 | # 
 | 
| 3 | # Non-portable rules involves C compilers, and must be done on the target
 | 
| 4 | # machine.
 | 
| 5 | 
 | 
| 6 | # The root of this repo, e.g. ~/git/oil, should be our PYTHONPATH for
 | 
| 7 | # detecting dependencies.
 | 
| 8 | # 
 | 
| 9 | # From this link:
 | 
| 10 | # https://stackoverflow.com/questions/322936/common-gnu-makefile-directory-path
 | 
| 11 | # Except we're using 'firstword' instead of 'lastword', because
 | 
| 12 | # _build/oil/ovm.d is the last one.
 | 
| 13 | REPO_ROOT := $(abspath $(dir $(firstword $(MAKEFILE_LIST))))
 | 
| 14 | 
 | 
| 15 | #
 | 
| 16 | # App-independent rules.
 | 
| 17 | #
 | 
| 18 | 
 | 
| 19 | # NOTES:
 | 
| 20 | # - Manually rm this file to generate a new build timestamp.
 | 
| 21 | # - This messes up reproducible builds.
 | 
| 22 | # - It's not marked .PHONY because that would mess up the end user build.
 | 
| 23 | #   bytecode-*.zip should NOT be built by the user.
 | 
| 24 | _build/release-date.txt:
 | 
| 25 | 	$(STAMP_SH) write-release-date
 | 
| 26 | 
 | 
| 27 | # The Makefiles generated by autoconf don't call configure, but Linux/toybox
 | 
| 28 | # config system does.  This can be overridden.
 | 
| 29 | _build/detected-config.sh:
 | 
| 30 | 	./configure
 | 
| 31 | 
 | 
| 32 | # Needed by make-tar for gcc -M
 | 
| 33 | _build/detected-config.h:
 | 
| 34 | 	./configure
 | 
| 35 | 
 | 
| 36 | # What files correspond to each C module.
 | 
| 37 | # TODO:
 | 
| 38 | # - Where to put -l z?  (Done in Modules/Setup.dist)
 | 
| 39 | _build/c-module-toc.txt: build/c_module_toc.py
 | 
| 40 | 	$(ACTIONS_SH) c-module-toc > $@
 | 
| 41 | 
 | 
| 42 | #
 | 
| 43 | # App-Independent Pattern Rules.
 | 
| 44 | #
 | 
| 45 | 
 | 
| 46 | # Regenerate dependencies.  But only if we made the app dirs.
 | 
| 47 | _build/%/ovm.d: _build/%/app-deps-c.txt
 | 
| 48 | 	$(ACTIONS_SH) make-dotd $* $^ > $@
 | 
| 49 | 
 | 
| 50 | # Source paths of all C modules the app depends on.  For the tarball.
 | 
| 51 | # A trick: remove the first dep to form the lists.  You can't just use $^
 | 
| 52 | # because './c_module_srcs.py' is rewritten to 'c_module_srcs.py'.
 | 
| 53 | _build/%/c-module-srcs.txt: \
 | 
| 54 | 	build/c_module_srcs.py _build/c-module-toc.txt _build/%/app-deps-c.txt
 | 
| 55 | 	build/c_module_srcs.py $(filter-out $<,$^) > $@
 | 
| 56 | 
 | 
| 57 | _build/%/all-deps-c.txt: build/static-c-modules.txt _build/%/app-deps-c.txt
 | 
| 58 | 	$(ACTIONS_SH) join-modules $^ > $@
 | 
| 59 | 
 | 
| 60 | _build/%/all-deps-py.txt: _build/%/py-to-compile.txt 
 | 
| 61 | 	sort $^ | uniq > $@
 | 
| 62 | 
 | 
| 63 | _build/opy/py27.grammar.marshal: opy/py27.grammar
 | 
| 64 | 	bin/opyc pgen2 $^ $@
 | 
| 65 | 
 | 
| 66 | # NOTE: This should really depend on all the .py files.
 | 
| 67 | # I should make a _build/oil/py.d file and include it?
 | 
| 68 | # This depends on the grammar pickle because it's the first one that calls opy
 | 
| 69 | # compile.
 | 
| 70 | _build/%/opy-app-deps.txt: _build/opy/py27.grammar.marshal _build/%/all-deps-py.txt
 | 
| 71 | 	# exclude the pickle
 | 
| 72 | 	cat _build/$*/all-deps-py.txt | opy/build.sh compile-manifest _build/$*/bytecode-opy > $@
 | 
| 73 | 
 | 
| 74 | 
 | 
| 75 | PY27 := Python-2.7.13
 | 
| 76 | 
 | 
| 77 | # Per-app extension module initialization.
 | 
| 78 | _build/%/module_init.c: $(PY27)/Modules/config.c.in _build/%/all-deps-c.txt
 | 
| 79 | 	# NOTE: Using xargs < input.txt style because it will fail if input.txt
 | 
| 80 | 	# doesn't exist!  'cat' errors will be swallowed.
 | 
| 81 | 	xargs $(ACTIONS_SH) gen-module-init < _build/$*/all-deps-c.txt > $@
 | 
| 82 | 
 | 
| 83 | 
 | 
| 84 | # 
 | 
| 85 | # Tarballs
 | 
| 86 | #
 | 
| 87 | # Contain Makefile and associated shell scripts, discovered .c and .py deps,
 | 
| 88 | # app source.
 | 
| 89 | 
 | 
| 90 | _release/%.tar: _build/%/$(BYTECODE_ZIP) \
 | 
| 91 |                 _build/%/module_init.c \
 | 
| 92 |                 _build/%/main_name.c \
 | 
| 93 |                 _build/%/c-module-srcs.txt \
 | 
| 94 |                 _build/detected-config.h
 | 
| 95 | 	$(COMPILE_SH) make-tar $* $(BYTECODE_ZIP) $@
 | 
| 96 | 
 |