Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 1 | # where py object files go (they have a name prefix to prevent filename clashes) |
Dave Hylands | c89c681 | 2014-01-24 01:05:30 -0800 | [diff] [blame] | 2 | PY_BUILD = $(BUILD)/py |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 3 | |
Andrew Scheller | 70a7d7a | 2014-04-16 22:10:33 +0100 | [diff] [blame] | 4 | # where autogenerated header files go |
Damien George | d553be5 | 2014-04-17 18:03:27 +0100 | [diff] [blame] | 5 | HEADER_BUILD = $(BUILD)/genhdr |
Andrew Scheller | 70a7d7a | 2014-04-16 22:10:33 +0100 | [diff] [blame] | 6 | |
7 | # file containing qstr defs for the core Python bit | ||||
Damien George | 55baff4 | 2014-01-21 21:40:13 +0000 | [diff] [blame] | 8 | PY_QSTR_DEFS = $(PY_SRC)/qstrdefs.h |
9 | |||||
Paul Sokolovsky | 1c1d902c | 2014-04-24 02:59:43 +0300 | [diff] [blame] | 10 | # some code is performance bottleneck and compiled with other optimization options |
11 | CSUPEROPT = -O3 | ||||
12 | |||||
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 13 | # py object files |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 14 | PY_O_BASENAME = \ |
Damien George | b4b10fd | 2015-01-01 23:30:53 +0000 | [diff] [blame] | 15 | mpstate.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 16 | nlrx86.o \ |
17 | nlrx64.o \ | ||||
18 | nlrthumb.o \ | ||||
Damien George | 2399aa0 | 2014-11-27 20:29:33 +0000 | [diff] [blame] | 19 | nlrxtensa.o \ |
Paul Sokolovsky | 3a83b80 | 2014-04-17 00:16:45 +0300 | [diff] [blame] | 20 | nlrsetjmp.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 21 | malloc.o \ |
Damien George | d3ebe48 | 2014-01-07 15:20:33 +0000 | [diff] [blame] | 22 | gc.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 23 | qstr.o \ |
24 | vstr.o \ | ||||
Damien George | 7f9d1d6 | 2015-04-09 23:56:15 +0100 | [diff] [blame] | 25 | mpprint.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 26 | unicode.o \ |
Damien George | 438c88d | 2014-02-22 19:25:23 +0000 | [diff] [blame] | 27 | mpz.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 28 | lexer.o \ |
Damien George | 9193f89 | 2014-01-08 15:28:26 +0000 | [diff] [blame] | 29 | lexerstr.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 30 | lexerunix.o \ |
31 | parse.o \ | ||||
32 | scope.o \ | ||||
33 | compile.o \ | ||||
34 | emitcommon.o \ | ||||
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 35 | emitcpy.o \ |
36 | emitbc.o \ | ||||
37 | asmx64.o \ | ||||
38 | emitnx64.o \ | ||||
Damien George | c90f59e | 2014-09-06 23:06:36 +0100 | [diff] [blame] | 39 | asmx86.o \ |
40 | emitnx86.o \ | ||||
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 41 | asmthumb.o \ |
42 | emitnthumb.o \ | ||||
43 | emitinlinethumb.o \ | ||||
Fabian Vogt | fe3d16e | 2014-08-16 22:55:53 +0200 | [diff] [blame] | 44 | asmarm.o \ |
45 | emitnarm.o \ | ||||
Damien George | 8bfec2b | 2014-03-10 13:27:02 +0000 | [diff] [blame] | 46 | formatfloat.o \ |
Damien George | 06201ff | 2014-03-01 19:50:50 +0000 | [diff] [blame] | 47 | parsenumbase.o \ |
Damien George | 2077397 | 2014-02-22 18:12:43 +0000 | [diff] [blame] | 48 | parsenum.o \ |
Damien George | 2326d52 | 2014-03-27 23:26:35 +0000 | [diff] [blame] | 49 | emitglue.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 50 | runtime.o \ |
Damien George | 110ba35 | 2014-08-28 23:37:02 +0100 | [diff] [blame] | 51 | nativeglue.o \ |
Paul Sokolovsky | 2366869 | 2014-06-25 03:03:34 +0300 | [diff] [blame] | 52 | stackctrl.o \ |
Damien George | a3f94e0 | 2014-04-20 00:13:22 +0100 | [diff] [blame] | 53 | argcheck.o \ |
Paul Sokolovsky | 8a8c1fc | 2015-01-01 09:29:28 +0200 | [diff] [blame] | 54 | warning.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 55 | map.o \ |
56 | obj.o \ | ||||
Paul Sokolovsky | 427905c | 2014-01-18 19:24:47 +0200 | [diff] [blame] | 57 | objarray.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 58 | objbool.o \ |
59 | objboundmeth.o \ | ||||
60 | objcell.o \ | ||||
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 61 | objclosure.o \ |
62 | objcomplex.o \ | ||||
63 | objdict.o \ | ||||
John R. Lenton | 9daa789 | 2014-01-14 23:55:01 +0000 | [diff] [blame] | 64 | objenumerate.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 65 | objexcept.o \ |
John R. Lenton | fca456b | 2014-01-15 01:37:08 +0000 | [diff] [blame] | 66 | objfilter.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 67 | objfloat.o \ |
68 | objfun.o \ | ||||
69 | objgenerator.o \ | ||||
Damien George | 7c9c667 | 2014-01-25 00:17:36 +0000 | [diff] [blame] | 70 | objgetitemiter.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 71 | objint.o \ |
Paul Sokolovsky | 966879c | 2014-01-17 20:01:36 +0200 | [diff] [blame] | 72 | objint_longlong.o \ |
Damien George | 438c88d | 2014-02-22 19:25:23 +0000 | [diff] [blame] | 73 | objint_mpz.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 74 | objlist.o \ |
John R. Lenton | 39b174e | 2014-01-15 01:10:09 +0000 | [diff] [blame] | 75 | objmap.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 76 | objmodule.o \ |
Damien George | 3ec0a1a | 2014-03-22 21:31:28 +0000 | [diff] [blame] | 77 | objobject.o \ |
Damien George | 777b0f3 | 2014-04-13 18:59:45 +0100 | [diff] [blame] | 78 | objproperty.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 79 | objnone.o \ |
Paul Sokolovsky | d08fd68 | 2014-02-27 22:22:04 +0200 | [diff] [blame] | 80 | objnamedtuple.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 81 | objrange.o \ |
Damien George | 4c03b3a | 2014-08-12 18:33:40 +0100 | [diff] [blame] | 82 | objreversed.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 83 | objset.o \ |
84 | objslice.o \ | ||||
85 | objstr.o \ | ||||
Paul Sokolovsky | 9731912 | 2014-06-13 22:01:26 +0300 | [diff] [blame] | 86 | objstrunicode.o \ |
Paul Sokolovsky | cb9dc08 | 2014-04-26 20:26:14 +0300 | [diff] [blame] | 87 | objstringio.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 88 | objtuple.o \ |
89 | objtype.o \ | ||||
Damien George | 55baff4 | 2014-01-21 21:40:13 +0000 | [diff] [blame] | 90 | objzip.o \ |
Paul Sokolovsky | 68e7c51 | 2014-04-13 11:53:15 +0300 | [diff] [blame] | 91 | opmethods.o \ |
Paul Sokolovsky | 439542f | 2014-01-21 00:19:19 +0200 | [diff] [blame] | 92 | sequence.o \ |
Paul Sokolovsky | e98cf40 | 2014-01-08 02:43:48 +0200 | [diff] [blame] | 93 | stream.o \ |
Paul Sokolovsky | 8bc3516 | 2014-02-14 17:16:35 +0200 | [diff] [blame] | 94 | binary.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 95 | builtinimport.o \ |
Damien George | ca47679 | 2014-02-03 22:44:10 +0000 | [diff] [blame] | 96 | builtinevex.o \ |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 97 | modarray.o \ |
Damien George | 78d702c | 2014-12-09 16:19:48 +0000 | [diff] [blame] | 98 | modbuiltins.o \ |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 99 | modcollections.o \ |
Paul Sokolovsky | f9e54e0 | 2014-05-06 02:16:43 +0300 | [diff] [blame] | 100 | modgc.o \ |
Paul Sokolovsky | 98a627d | 2014-04-03 14:57:53 +0300 | [diff] [blame] | 101 | modio.o \ |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 102 | modmath.o \ |
Damien George | dbdfee1 | 2014-04-17 17:11:03 +0100 | [diff] [blame] | 103 | modcmath.o \ |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 104 | modmicropython.o \ |
Paul Sokolovsky | e9db840 | 2014-04-10 03:45:38 +0300 | [diff] [blame] | 105 | modstruct.o \ |
Paul Sokolovsky | 5500cde | 2014-04-13 06:43:18 +0300 | [diff] [blame] | 106 | modsys.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 107 | vm.o \ |
Damien George | b534e1b | 2014-09-04 14:44:01 +0100 | [diff] [blame] | 108 | bc.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 109 | showbc.o \ |
110 | repl.o \ | ||||
Damien George | ecf5b77 | 2014-04-04 11:13:51 +0000 | [diff] [blame] | 111 | smallint.o \ |
Paul Sokolovsky | 640e0b2 | 2015-01-20 11:52:12 +0200 | [diff] [blame] | 112 | frozenmod.o \ |
Paul Sokolovsky | 510296f | 2014-08-08 22:51:40 +0300 | [diff] [blame] | 113 | ../extmod/moductypes.o \ |
Damien George | 612045f | 2014-09-17 22:56:34 +0100 | [diff] [blame] | 114 | ../extmod/modujson.o \ |
Paul Sokolovsky | c71e045 | 2014-09-12 18:48:07 +0300 | [diff] [blame] | 115 | ../extmod/modure.o \ |
Paul Sokolovsky | 3416287 | 2014-10-12 08:16:34 -0700 | [diff] [blame] | 116 | ../extmod/moduzlib.o \ |
Damien George | f5d6979 | 2014-10-22 17:37:18 +0000 | [diff] [blame] | 117 | ../extmod/moduheapq.o \ |
Paul Sokolovsky | f4b19c8 | 2014-11-22 01:19:13 +0200 | [diff] [blame] | 118 | ../extmod/moduhashlib.o \ |
Paul Sokolovsky | bfdc205 | 2014-11-29 06:19:30 +0200 | [diff] [blame] | 119 | ../extmod/modubinascii.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 120 | |
121 | # prepend the build destination prefix to the py object files | ||||
Dave Hylands | c89c681 | 2014-01-24 01:05:30 -0800 | [diff] [blame] | 122 | PY_O = $(addprefix $(PY_BUILD)/, $(PY_O_BASENAME)) |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 123 | |
Dave Hylands | bf7d690 | 2014-04-03 16:32:58 -0700 | [diff] [blame] | 124 | # Anything that depends on FORCE will be considered out-of-date |
125 | FORCE: | ||||
126 | .PHONY: FORCE | ||||
127 | |||||
Sven Wegener | bfb18a7 | 2014-11-05 21:02:43 +0100 | [diff] [blame] | 128 | $(HEADER_BUILD)/py-version.h: FORCE | $(HEADER_BUILD) |
Dave Hylands | bf7d690 | 2014-04-03 16:32:58 -0700 | [diff] [blame] | 129 | $(Q)$(PY_SRC)/py-version.sh > $@.tmp |
130 | $(Q)if [ -f "$@" ] && cmp -s $@ $@.tmp; then rm $@.tmp; else echo "Generating $@"; mv $@.tmp $@; fi | ||||
131 | |||||
Damien George | 55baff4 | 2014-01-21 21:40:13 +0000 | [diff] [blame] | 132 | # qstr data |
133 | |||||
Damien George | d553be5 | 2014-04-17 18:03:27 +0100 | [diff] [blame] | 134 | # Adding an order only dependency on $(HEADER_BUILD) causes $(HEADER_BUILD) to get |
Dave Hylands | c89c681 | 2014-01-24 01:05:30 -0800 | [diff] [blame] | 135 | # created before we run the script to generate the .h |
Damien George | d553be5 | 2014-04-17 18:03:27 +0100 | [diff] [blame] | 136 | $(HEADER_BUILD)/qstrdefs.generated.h: $(PY_QSTR_DEFS) $(QSTR_DEFS) $(PY_SRC)/makeqstrdata.py mpconfigport.h $(PY_SRC)/mpconfig.h | $(HEADER_BUILD) |
137 | $(ECHO) "CPP $<" | ||||
138 | $(Q)$(CPP) $(CFLAGS) $(PY_QSTR_DEFS) -o $(HEADER_BUILD)/qstrdefs.preprocessed.h | ||||
Damien George | 55baff4 | 2014-01-21 21:40:13 +0000 | [diff] [blame] | 139 | $(ECHO) "makeqstrdata $(PY_QSTR_DEFS) $(QSTR_DEFS)" |
Damien George | d553be5 | 2014-04-17 18:03:27 +0100 | [diff] [blame] | 140 | $(Q)$(PYTHON) $(PY_SRC)/makeqstrdata.py $(HEADER_BUILD)/qstrdefs.preprocessed.h $(QSTR_DEFS) > $@ |
Damien George | 55baff4 | 2014-01-21 21:40:13 +0000 | [diff] [blame] | 141 | |
142 | # emitters | ||||
143 | |||||
Dave Hylands | c89c681 | 2014-01-24 01:05:30 -0800 | [diff] [blame] | 144 | $(PY_BUILD)/emitnx64.o: CFLAGS += -DN_X64 |
145 | $(PY_BUILD)/emitnx64.o: py/emitnative.c | ||||
146 | $(call compile_c) | ||||
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 147 | |
Damien George | c90f59e | 2014-09-06 23:06:36 +0100 | [diff] [blame] | 148 | $(PY_BUILD)/emitnx86.o: CFLAGS += -DN_X86 |
149 | $(PY_BUILD)/emitnx86.o: py/emitnative.c | ||||
150 | $(call compile_c) | ||||
151 | |||||
Dave Hylands | c89c681 | 2014-01-24 01:05:30 -0800 | [diff] [blame] | 152 | $(PY_BUILD)/emitnthumb.o: CFLAGS += -DN_THUMB |
153 | $(PY_BUILD)/emitnthumb.o: py/emitnative.c | ||||
154 | $(call compile_c) | ||||
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 155 | |
Fabian Vogt | fe3d16e | 2014-08-16 22:55:53 +0200 | [diff] [blame] | 156 | $(PY_BUILD)/emitnarm.o: CFLAGS += -DN_ARM |
157 | $(PY_BUILD)/emitnarm.o: py/emitnative.c | ||||
158 | $(call compile_c) | ||||
159 | |||||
Damien George | d3ebe48 | 2014-01-07 15:20:33 +0000 | [diff] [blame] | 160 | # optimising gc for speed; 5ms down to 4ms on pybv2 |
Paul Sokolovsky | 1c1d902c | 2014-04-24 02:59:43 +0300 | [diff] [blame] | 161 | $(PY_BUILD)/gc.o: CFLAGS += $(CSUPEROPT) |
Damien George | d3ebe48 | 2014-01-07 15:20:33 +0000 | [diff] [blame] | 162 | |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 163 | # optimising vm for speed, adds only a small amount to code size but makes a huge difference to speed (20% faster) |
Paul Sokolovsky | 1c1d902c | 2014-04-24 02:59:43 +0300 | [diff] [blame] | 164 | $(PY_BUILD)/vm.o: CFLAGS += $(CSUPEROPT) |
Paul Sokolovsky | 23f1b5f | 2014-12-28 07:44:09 +0200 | [diff] [blame] | 165 | # Optimizing vm.o for modern deeply pipelined CPUs with branch predictors |
166 | # may require disabling tail jump optimization. This will make sure that | ||||
167 | # each opcode has its own dispatching jump which will improve branch | ||||
168 | # branch predictor efficiency. | ||||
169 | # http://article.gmane.org/gmane.comp.lang.lua.general/75426 | ||||
170 | # http://hg.python.org/cpython/file/b127046831e2/Python/ceval.c#l828 | ||||
171 | # http://www.emulators.com/docs/nx25_nostradamus.htm | ||||
172 | #-fno-crossjumping |