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 = \ |
15 | nlrx86.o \ | ||||
16 | nlrx64.o \ | ||||
17 | nlrthumb.o \ | ||||
Paul Sokolovsky | 3a83b80 | 2014-04-17 00:16:45 +0300 | [diff] [blame] | 18 | nlrsetjmp.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 19 | malloc.o \ |
Damien George | d3ebe48 | 2014-01-07 15:20:33 +0000 | [diff] [blame] | 20 | gc.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 21 | qstr.o \ |
22 | vstr.o \ | ||||
23 | unicode.o \ | ||||
Damien George | 438c88d | 2014-02-22 19:25:23 +0000 | [diff] [blame] | 24 | mpz.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 25 | lexer.o \ |
Damien George | 9193f89 | 2014-01-08 15:28:26 +0000 | [diff] [blame] | 26 | lexerstr.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 27 | lexerunix.o \ |
28 | parse.o \ | ||||
Damien George | c596612 | 2014-02-15 16:10:44 +0000 | [diff] [blame] | 29 | parsehelper.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 30 | scope.o \ |
31 | compile.o \ | ||||
32 | emitcommon.o \ | ||||
33 | emitpass1.o \ | ||||
34 | emitcpy.o \ | ||||
35 | emitbc.o \ | ||||
36 | asmx64.o \ | ||||
37 | emitnx64.o \ | ||||
Damien George | c90f59e | 2014-09-06 23:06:36 +0100 | [diff] [blame] | 38 | asmx86.o \ |
39 | emitnx86.o \ | ||||
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 40 | asmthumb.o \ |
41 | emitnthumb.o \ | ||||
42 | emitinlinethumb.o \ | ||||
Fabian Vogt | fe3d16e | 2014-08-16 22:55:53 +0200 | [diff] [blame] | 43 | asmarm.o \ |
44 | emitnarm.o \ | ||||
Damien George | 8bfec2b | 2014-03-10 13:27:02 +0000 | [diff] [blame] | 45 | formatfloat.o \ |
Damien George | 06201ff | 2014-03-01 19:50:50 +0000 | [diff] [blame] | 46 | parsenumbase.o \ |
Damien George | 2077397 | 2014-02-22 18:12:43 +0000 | [diff] [blame] | 47 | parsenum.o \ |
Damien George | 2326d52 | 2014-03-27 23:26:35 +0000 | [diff] [blame] | 48 | emitglue.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 49 | runtime.o \ |
Damien George | 110ba35 | 2014-08-28 23:37:02 +0100 | [diff] [blame] | 50 | nativeglue.o \ |
Paul Sokolovsky | 2366869 | 2014-06-25 03:03:34 +0300 | [diff] [blame] | 51 | stackctrl.o \ |
Damien George | a3f94e0 | 2014-04-20 00:13:22 +0100 | [diff] [blame] | 52 | argcheck.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 53 | map.o \ |
54 | obj.o \ | ||||
Paul Sokolovsky | 427905c | 2014-01-18 19:24:47 +0200 | [diff] [blame] | 55 | objarray.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 56 | objbool.o \ |
57 | objboundmeth.o \ | ||||
58 | objcell.o \ | ||||
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 59 | objclosure.o \ |
60 | objcomplex.o \ | ||||
61 | objdict.o \ | ||||
John R. Lenton | 9daa789 | 2014-01-14 23:55:01 +0000 | [diff] [blame] | 62 | objenumerate.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 63 | objexcept.o \ |
John R. Lenton | fca456b | 2014-01-15 01:37:08 +0000 | [diff] [blame] | 64 | objfilter.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 65 | objfloat.o \ |
66 | objfun.o \ | ||||
67 | objgenerator.o \ | ||||
Damien George | 7c9c667 | 2014-01-25 00:17:36 +0000 | [diff] [blame] | 68 | objgetitemiter.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 69 | objint.o \ |
Paul Sokolovsky | 966879c | 2014-01-17 20:01:36 +0200 | [diff] [blame] | 70 | objint_longlong.o \ |
Damien George | 438c88d | 2014-02-22 19:25:23 +0000 | [diff] [blame] | 71 | objint_mpz.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 72 | objlist.o \ |
John R. Lenton | 39b174e | 2014-01-15 01:10:09 +0000 | [diff] [blame] | 73 | objmap.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 74 | objmodule.o \ |
Damien George | 3ec0a1a | 2014-03-22 21:31:28 +0000 | [diff] [blame] | 75 | objobject.o \ |
Damien George | 777b0f3 | 2014-04-13 18:59:45 +0100 | [diff] [blame] | 76 | objproperty.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 77 | objnone.o \ |
Paul Sokolovsky | d08fd68 | 2014-02-27 22:22:04 +0200 | [diff] [blame] | 78 | objnamedtuple.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 79 | objrange.o \ |
Damien George | 4c03b3a | 2014-08-12 18:33:40 +0100 | [diff] [blame] | 80 | objreversed.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 81 | objset.o \ |
82 | objslice.o \ | ||||
83 | objstr.o \ | ||||
Paul Sokolovsky | 9731912 | 2014-06-13 22:01:26 +0300 | [diff] [blame] | 84 | objstrunicode.o \ |
Paul Sokolovsky | cb9dc08 | 2014-04-26 20:26:14 +0300 | [diff] [blame] | 85 | objstringio.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 86 | objtuple.o \ |
87 | objtype.o \ | ||||
Damien George | 55baff4 | 2014-01-21 21:40:13 +0000 | [diff] [blame] | 88 | objzip.o \ |
Paul Sokolovsky | 68e7c51 | 2014-04-13 11:53:15 +0300 | [diff] [blame] | 89 | opmethods.o \ |
Paul Sokolovsky | 439542f | 2014-01-21 00:19:19 +0200 | [diff] [blame] | 90 | sequence.o \ |
Paul Sokolovsky | e98cf40 | 2014-01-08 02:43:48 +0200 | [diff] [blame] | 91 | stream.o \ |
Paul Sokolovsky | 8bc3516 | 2014-02-14 17:16:35 +0200 | [diff] [blame] | 92 | binary.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 93 | builtin.o \ |
94 | builtinimport.o \ | ||||
Damien George | ca47679 | 2014-02-03 22:44:10 +0000 | [diff] [blame] | 95 | builtinevex.o \ |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 96 | builtintables.o \ |
97 | modarray.o \ | ||||
98 | modcollections.o \ | ||||
Paul Sokolovsky | f9e54e0 | 2014-05-06 02:16:43 +0300 | [diff] [blame] | 99 | modgc.o \ |
Paul Sokolovsky | 98a627d | 2014-04-03 14:57:53 +0300 | [diff] [blame] | 100 | modio.o \ |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 101 | modmath.o \ |
Damien George | dbdfee1 | 2014-04-17 17:11:03 +0100 | [diff] [blame] | 102 | modcmath.o \ |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 103 | modmicropython.o \ |
Paul Sokolovsky | e9db840 | 2014-04-10 03:45:38 +0300 | [diff] [blame] | 104 | modstruct.o \ |
Paul Sokolovsky | 5500cde | 2014-04-13 06:43:18 +0300 | [diff] [blame] | 105 | modsys.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 106 | vm.o \ |
Damien George | b534e1b | 2014-09-04 14:44:01 +0100 | [diff] [blame] | 107 | bc.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 108 | showbc.o \ |
109 | repl.o \ | ||||
Damien George | ecf5b77 | 2014-04-04 11:13:51 +0000 | [diff] [blame] | 110 | smallint.o \ |
Dave Hylands | baf6f14 | 2014-03-30 21:06:50 -0700 | [diff] [blame] | 111 | pfenv.o \ |
Paul Sokolovsky | cb66f41 | 2014-07-13 23:07:42 +0300 | [diff] [blame] | 112 | pfenv_printf.o \ |
Paul Sokolovsky | 510296f | 2014-08-08 22:51:40 +0300 | [diff] [blame] | 113 | ../extmod/moductypes.o \ |
114 | ../extmod/modzlibd.o \ | ||||
Damien George | 612045f | 2014-09-17 22:56:34 +0100 | [diff] [blame] | 115 | ../extmod/modujson.o \ |
Paul Sokolovsky | c71e045 | 2014-09-12 18:48:07 +0300 | [diff] [blame] | 116 | ../extmod/modure.o \ |
Paul Sokolovsky | 3416287 | 2014-10-12 08:16:34 -0700 | [diff] [blame^] | 117 | ../extmod/moduzlib.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 118 | |
119 | # prepend the build destination prefix to the py object files | ||||
Dave Hylands | c89c681 | 2014-01-24 01:05:30 -0800 | [diff] [blame] | 120 | PY_O = $(addprefix $(PY_BUILD)/, $(PY_O_BASENAME)) |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 121 | |
Dave Hylands | bf7d690 | 2014-04-03 16:32:58 -0700 | [diff] [blame] | 122 | # Anything that depends on FORCE will be considered out-of-date |
123 | FORCE: | ||||
124 | .PHONY: FORCE | ||||
125 | |||||
Damien George | d553be5 | 2014-04-17 18:03:27 +0100 | [diff] [blame] | 126 | $(HEADER_BUILD)/py-version.h: FORCE |
Dave Hylands | bf7d690 | 2014-04-03 16:32:58 -0700 | [diff] [blame] | 127 | $(Q)$(PY_SRC)/py-version.sh > $@.tmp |
128 | $(Q)if [ -f "$@" ] && cmp -s $@ $@.tmp; then rm $@.tmp; else echo "Generating $@"; mv $@.tmp $@; fi | ||||
129 | |||||
Damien George | 55baff4 | 2014-01-21 21:40:13 +0000 | [diff] [blame] | 130 | # qstr data |
131 | |||||
Damien George | d553be5 | 2014-04-17 18:03:27 +0100 | [diff] [blame] | 132 | # 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] | 133 | # created before we run the script to generate the .h |
Damien George | d553be5 | 2014-04-17 18:03:27 +0100 | [diff] [blame] | 134 | $(HEADER_BUILD)/qstrdefs.generated.h: $(PY_QSTR_DEFS) $(QSTR_DEFS) $(PY_SRC)/makeqstrdata.py mpconfigport.h $(PY_SRC)/mpconfig.h | $(HEADER_BUILD) |
135 | $(ECHO) "CPP $<" | ||||
136 | $(Q)$(CPP) $(CFLAGS) $(PY_QSTR_DEFS) -o $(HEADER_BUILD)/qstrdefs.preprocessed.h | ||||
Damien George | 55baff4 | 2014-01-21 21:40:13 +0000 | [diff] [blame] | 137 | $(ECHO) "makeqstrdata $(PY_QSTR_DEFS) $(QSTR_DEFS)" |
Damien George | d553be5 | 2014-04-17 18:03:27 +0100 | [diff] [blame] | 138 | $(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] | 139 | |
Dave Hylands | c89c681 | 2014-01-24 01:05:30 -0800 | [diff] [blame] | 140 | # We don't know which source files actually need the generated.h (since |
141 | # it is #included from str.h). The compiler generated dependencies will cause | ||||
142 | # the right .o's to get recompiled if the generated.h file changes. Adding | ||||
143 | # an order-only dependendency to all of the .o's will cause the generated .h | ||||
144 | # to get built before we try to compile any of them. | ||||
Damien George | d553be5 | 2014-04-17 18:03:27 +0100 | [diff] [blame] | 145 | $(PY_O): | $(HEADER_BUILD)/qstrdefs.generated.h $(HEADER_BUILD)/py-version.h |
Dave Hylands | c89c681 | 2014-01-24 01:05:30 -0800 | [diff] [blame] | 146 | |
Damien George | 55baff4 | 2014-01-21 21:40:13 +0000 | [diff] [blame] | 147 | # emitters |
148 | |||||
Dave Hylands | c89c681 | 2014-01-24 01:05:30 -0800 | [diff] [blame] | 149 | $(PY_BUILD)/emitnx64.o: CFLAGS += -DN_X64 |
150 | $(PY_BUILD)/emitnx64.o: py/emitnative.c | ||||
151 | $(call compile_c) | ||||
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 152 | |
Damien George | c90f59e | 2014-09-06 23:06:36 +0100 | [diff] [blame] | 153 | $(PY_BUILD)/emitnx86.o: CFLAGS += -DN_X86 |
154 | $(PY_BUILD)/emitnx86.o: py/emitnative.c | ||||
155 | $(call compile_c) | ||||
156 | |||||
Dave Hylands | c89c681 | 2014-01-24 01:05:30 -0800 | [diff] [blame] | 157 | $(PY_BUILD)/emitnthumb.o: CFLAGS += -DN_THUMB |
158 | $(PY_BUILD)/emitnthumb.o: py/emitnative.c | ||||
159 | $(call compile_c) | ||||
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 160 | |
Fabian Vogt | fe3d16e | 2014-08-16 22:55:53 +0200 | [diff] [blame] | 161 | $(PY_BUILD)/emitnarm.o: CFLAGS += -DN_ARM |
162 | $(PY_BUILD)/emitnarm.o: py/emitnative.c | ||||
163 | $(call compile_c) | ||||
164 | |||||
Damien George | d3ebe48 | 2014-01-07 15:20:33 +0000 | [diff] [blame] | 165 | # optimising gc for speed; 5ms down to 4ms on pybv2 |
Paul Sokolovsky | 1c1d902c | 2014-04-24 02:59:43 +0300 | [diff] [blame] | 166 | $(PY_BUILD)/gc.o: CFLAGS += $(CSUPEROPT) |
Damien George | d3ebe48 | 2014-01-07 15:20:33 +0000 | [diff] [blame] | 167 | |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 168 | # 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] | 169 | $(PY_BUILD)/vm.o: CFLAGS += $(CSUPEROPT) |