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 | |
Paul Sokolovsky | e0f5df5 | 2015-10-19 18:22:16 +0300 | [diff] [blame] | 13 | INC += -I../lib/netutils |
| 14 | |
Paul Sokolovsky | aaa8867 | 2015-10-06 18:10:00 +0300 | [diff] [blame] | 15 | ifeq ($(MICROPY_PY_USSL),1) |
| 16 | CFLAGS_MOD += -DMICROPY_PY_USSL=1 -I../lib/axtls/ssl -I../lib/axtls/crypto -I../lib/axtls/config |
| 17 | LDFLAGS_MOD += -L../lib/axtls/_stage -laxtls |
| 18 | endif |
| 19 | |
Paul Sokolovsky | e0d7740 | 2015-10-27 00:04:33 +0300 | [diff] [blame] | 20 | #ifeq ($(MICROPY_PY_LWIP),1) |
| 21 | #CFLAGS_MOD += -DMICROPY_PY_LWIP=1 -I../lib/lwip/src/include -I../lib/lwip/src/include/ipv4 -I../extmod/lwip-include |
| 22 | #endif |
| 23 | |
| 24 | ifeq ($(MICROPY_PY_LWIP),1) |
| 25 | LWIP_DIR = lib/lwip/src |
| 26 | INC += -I../lib/lwip/src/include -I../lib/lwip/src/include/ipv4 -I../extmod/lwip-include |
| 27 | CFLAGS_MOD += -DMICROPY_PY_LWIP=1 |
| 28 | SRC_MOD += extmod/modlwip.c lib/netutils/netutils.c |
| 29 | SRC_MOD += $(addprefix $(LWIP_DIR)/,\ |
| 30 | core/def.c \ |
| 31 | core/dns.c \ |
| 32 | core/init.c \ |
| 33 | core/mem.c \ |
| 34 | core/memp.c \ |
| 35 | core/netif.c \ |
| 36 | core/pbuf.c \ |
| 37 | core/raw.c \ |
| 38 | core/stats.c \ |
| 39 | core/sys.c \ |
| 40 | core/tcp.c \ |
| 41 | core/tcp_in.c \ |
| 42 | core/tcp_out.c \ |
| 43 | core/timers.c \ |
| 44 | core/udp.c \ |
| 45 | core/ipv4/autoip.c \ |
| 46 | core/ipv4/icmp.c \ |
| 47 | core/ipv4/igmp.c \ |
| 48 | core/ipv4/inet.c \ |
| 49 | core/ipv4/inet_chksum.c \ |
| 50 | core/ipv4/ip_addr.c \ |
| 51 | core/ipv4/ip.c \ |
| 52 | core/ipv4/ip_frag.c \ |
| 53 | ) |
| 54 | ifeq ($(MICROPY_PY_LWIP_SLIP),1) |
| 55 | CFLAGS_MOD += -DMICROPY_PY_LWIP_SLIP=1 |
| 56 | SRC_MOD += $(LWIP_DIR)/netif/slipif.c |
| 57 | endif |
| 58 | endif |
| 59 | |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 60 | # py object files |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 61 | PY_O_BASENAME = \ |
Damien George | b4b10fd | 2015-01-01 23:30:53 +0000 | [diff] [blame] | 62 | mpstate.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 63 | nlrx86.o \ |
| 64 | nlrx64.o \ |
| 65 | nlrthumb.o \ |
Damien George | 2399aa0 | 2014-11-27 20:29:33 +0000 | [diff] [blame] | 66 | nlrxtensa.o \ |
Paul Sokolovsky | 3a83b80 | 2014-04-17 00:16:45 +0300 | [diff] [blame] | 67 | nlrsetjmp.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 68 | malloc.o \ |
Damien George | d3ebe48 | 2014-01-07 15:20:33 +0000 | [diff] [blame] | 69 | gc.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 70 | qstr.o \ |
| 71 | vstr.o \ |
Damien George | 7f9d1d6 | 2015-04-09 23:56:15 +0100 | [diff] [blame] | 72 | mpprint.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 73 | unicode.o \ |
Damien George | 438c88d | 2014-02-22 19:25:23 +0000 | [diff] [blame] | 74 | mpz.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 75 | lexer.o \ |
Damien George | 9193f89 | 2014-01-08 15:28:26 +0000 | [diff] [blame] | 76 | lexerstr.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 77 | lexerunix.o \ |
| 78 | parse.o \ |
| 79 | scope.o \ |
| 80 | compile.o \ |
| 81 | emitcommon.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 82 | emitbc.o \ |
| 83 | asmx64.o \ |
| 84 | emitnx64.o \ |
Damien George | c90f59e | 2014-09-06 23:06:36 +0100 | [diff] [blame] | 85 | asmx86.o \ |
| 86 | emitnx86.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 87 | asmthumb.o \ |
| 88 | emitnthumb.o \ |
| 89 | emitinlinethumb.o \ |
Fabian Vogt | fe3d16e | 2014-08-16 22:55:53 +0200 | [diff] [blame] | 90 | asmarm.o \ |
| 91 | emitnarm.o \ |
Damien George | 8bfec2b | 2014-03-10 13:27:02 +0000 | [diff] [blame] | 92 | formatfloat.o \ |
Damien George | 06201ff | 2014-03-01 19:50:50 +0000 | [diff] [blame] | 93 | parsenumbase.o \ |
Damien George | 2077397 | 2014-02-22 18:12:43 +0000 | [diff] [blame] | 94 | parsenum.o \ |
Damien George | 2326d52 | 2014-03-27 23:26:35 +0000 | [diff] [blame] | 95 | emitglue.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 96 | runtime.o \ |
Damien George | 110ba35 | 2014-08-28 23:37:02 +0100 | [diff] [blame] | 97 | nativeglue.o \ |
Paul Sokolovsky | 2366869 | 2014-06-25 03:03:34 +0300 | [diff] [blame] | 98 | stackctrl.o \ |
Damien George | a3f94e0 | 2014-04-20 00:13:22 +0100 | [diff] [blame] | 99 | argcheck.o \ |
Paul Sokolovsky | 8a8c1fc | 2015-01-01 09:29:28 +0200 | [diff] [blame] | 100 | warning.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 101 | map.o \ |
| 102 | obj.o \ |
Paul Sokolovsky | 427905c | 2014-01-18 19:24:47 +0200 | [diff] [blame] | 103 | objarray.o \ |
Damien George | 5aa311d | 2015-04-21 14:14:24 +0000 | [diff] [blame] | 104 | objattrtuple.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 105 | objbool.o \ |
| 106 | objboundmeth.o \ |
| 107 | objcell.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 108 | objclosure.o \ |
| 109 | objcomplex.o \ |
| 110 | objdict.o \ |
John R. Lenton | 9daa789 | 2014-01-14 23:55:01 +0000 | [diff] [blame] | 111 | objenumerate.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 112 | objexcept.o \ |
John R. Lenton | fca456b | 2014-01-15 01:37:08 +0000 | [diff] [blame] | 113 | objfilter.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 114 | objfloat.o \ |
| 115 | objfun.o \ |
| 116 | objgenerator.o \ |
Damien George | 7c9c667 | 2014-01-25 00:17:36 +0000 | [diff] [blame] | 117 | objgetitemiter.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 118 | objint.o \ |
Paul Sokolovsky | 966879c | 2014-01-17 20:01:36 +0200 | [diff] [blame] | 119 | objint_longlong.o \ |
Damien George | 438c88d | 2014-02-22 19:25:23 +0000 | [diff] [blame] | 120 | objint_mpz.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 121 | objlist.o \ |
John R. Lenton | 39b174e | 2014-01-15 01:10:09 +0000 | [diff] [blame] | 122 | objmap.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 123 | objmodule.o \ |
Damien George | 3ec0a1a | 2014-03-22 21:31:28 +0000 | [diff] [blame] | 124 | objobject.o \ |
Paul Sokolovsky | 1a1ccea | 2015-12-14 23:48:12 +0200 | [diff] [blame] | 125 | objpolyiter.o \ |
Damien George | 777b0f3 | 2014-04-13 18:59:45 +0100 | [diff] [blame] | 126 | objproperty.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 127 | objnone.o \ |
Paul Sokolovsky | d08fd68 | 2014-02-27 22:22:04 +0200 | [diff] [blame] | 128 | objnamedtuple.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 129 | objrange.o \ |
Damien George | 4c03b3a | 2014-08-12 18:33:40 +0100 | [diff] [blame] | 130 | objreversed.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 131 | objset.o \ |
Paul Sokolovsky | 7667727 | 2015-05-05 22:18:07 +0300 | [diff] [blame] | 132 | objsingleton.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 133 | objslice.o \ |
| 134 | objstr.o \ |
Paul Sokolovsky | 9731912 | 2014-06-13 22:01:26 +0300 | [diff] [blame] | 135 | objstrunicode.o \ |
Paul Sokolovsky | cb9dc08 | 2014-04-26 20:26:14 +0300 | [diff] [blame] | 136 | objstringio.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 137 | objtuple.o \ |
| 138 | objtype.o \ |
Damien George | 55baff4 | 2014-01-21 21:40:13 +0000 | [diff] [blame] | 139 | objzip.o \ |
Paul Sokolovsky | 68e7c51 | 2014-04-13 11:53:15 +0300 | [diff] [blame] | 140 | opmethods.o \ |
Paul Sokolovsky | 439542f | 2014-01-21 00:19:19 +0200 | [diff] [blame] | 141 | sequence.o \ |
Paul Sokolovsky | e98cf40 | 2014-01-08 02:43:48 +0200 | [diff] [blame] | 142 | stream.o \ |
Paul Sokolovsky | 8bc3516 | 2014-02-14 17:16:35 +0200 | [diff] [blame] | 143 | binary.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 144 | builtinimport.o \ |
Damien George | ca47679 | 2014-02-03 22:44:10 +0000 | [diff] [blame] | 145 | builtinevex.o \ |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 146 | modarray.o \ |
Damien George | 78d702c | 2014-12-09 16:19:48 +0000 | [diff] [blame] | 147 | modbuiltins.o \ |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 148 | modcollections.o \ |
Paul Sokolovsky | f9e54e0 | 2014-05-06 02:16:43 +0300 | [diff] [blame] | 149 | modgc.o \ |
Paul Sokolovsky | 98a627d | 2014-04-03 14:57:53 +0300 | [diff] [blame] | 150 | modio.o \ |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 151 | modmath.o \ |
Damien George | dbdfee1 | 2014-04-17 17:11:03 +0100 | [diff] [blame] | 152 | modcmath.o \ |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 153 | modmicropython.o \ |
Paul Sokolovsky | e9db840 | 2014-04-10 03:45:38 +0300 | [diff] [blame] | 154 | modstruct.o \ |
Paul Sokolovsky | 5500cde | 2014-04-13 06:43:18 +0300 | [diff] [blame] | 155 | modsys.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 156 | vm.o \ |
Damien George | b534e1b | 2014-09-04 14:44:01 +0100 | [diff] [blame] | 157 | bc.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 158 | showbc.o \ |
| 159 | repl.o \ |
Damien George | ecf5b77 | 2014-04-04 11:13:51 +0000 | [diff] [blame] | 160 | smallint.o \ |
Paul Sokolovsky | 640e0b2 | 2015-01-20 11:52:12 +0200 | [diff] [blame] | 161 | frozenmod.o \ |
Paul Sokolovsky | 510296f | 2014-08-08 22:51:40 +0300 | [diff] [blame] | 162 | ../extmod/moductypes.o \ |
Damien George | 612045f | 2014-09-17 22:56:34 +0100 | [diff] [blame] | 163 | ../extmod/modujson.o \ |
Paul Sokolovsky | c71e045 | 2014-09-12 18:48:07 +0300 | [diff] [blame] | 164 | ../extmod/modure.o \ |
Paul Sokolovsky | 3416287 | 2014-10-12 08:16:34 -0700 | [diff] [blame] | 165 | ../extmod/moduzlib.o \ |
Damien George | f5d6979 | 2014-10-22 17:37:18 +0000 | [diff] [blame] | 166 | ../extmod/moduheapq.o \ |
Paul Sokolovsky | f4b19c8 | 2014-11-22 01:19:13 +0200 | [diff] [blame] | 167 | ../extmod/moduhashlib.o \ |
Paul Sokolovsky | bfdc205 | 2014-11-29 06:19:30 +0200 | [diff] [blame] | 168 | ../extmod/modubinascii.o \ |
Dave Hylands | f925165 | 2015-12-12 17:15:33 -0500 | [diff] [blame] | 169 | ../extmod/machine_mem.o \ |
Paul Sokolovsky | aaa8867 | 2015-10-06 18:10:00 +0300 | [diff] [blame] | 170 | ../extmod/modussl.o \ |
Paul Sokolovsky | 3a1bbcc | 2015-11-25 00:43:11 +0200 | [diff] [blame] | 171 | ../extmod/fsusermount.o \ |
Paul Sokolovsky | ddea7cb | 2016-01-01 13:02:53 +0200 | [diff] [blame] | 172 | ../extmod/moduos_dupterm.o \ |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 173 | |
| 174 | # prepend the build destination prefix to the py object files |
Dave Hylands | c89c681 | 2014-01-24 01:05:30 -0800 | [diff] [blame] | 175 | PY_O = $(addprefix $(PY_BUILD)/, $(PY_O_BASENAME)) |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 176 | |
Dave Hylands | bf7d690 | 2014-04-03 16:32:58 -0700 | [diff] [blame] | 177 | # Anything that depends on FORCE will be considered out-of-date |
| 178 | FORCE: |
| 179 | .PHONY: FORCE |
| 180 | |
Damien George | 95f5346 | 2015-04-22 17:38:05 +0100 | [diff] [blame] | 181 | $(HEADER_BUILD)/mpversion.h: FORCE | $(HEADER_BUILD) |
| 182 | $(Q)$(PYTHON) $(PY_SRC)/makeversionhdr.py $@ |
Dave Hylands | bf7d690 | 2014-04-03 16:32:58 -0700 | [diff] [blame] | 183 | |
Paul Sokolovsky | a19ba5f | 2015-06-11 01:24:54 +0300 | [diff] [blame] | 184 | # mpconfigport.mk is optional, but changes to it may drastically change |
| 185 | # overall config, so they need to be caught |
| 186 | MPCONFIGPORT_MK = $(wildcard mpconfigport.mk) |
| 187 | |
Damien George | 55baff4 | 2014-01-21 21:40:13 +0000 | [diff] [blame] | 188 | # qstr data |
| 189 | |
Damien George | d553be5 | 2014-04-17 18:03:27 +0100 | [diff] [blame] | 190 | # 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] | 191 | # created before we run the script to generate the .h |
Damien George | db52fd8 | 2015-05-30 23:14:34 +0100 | [diff] [blame] | 192 | # Note: we need to protect the qstr names from the preprocessor, so we wrap |
| 193 | # the lines in "" and then unwrap after the preprocessor is finished. |
Paul Sokolovsky | a19ba5f | 2015-06-11 01:24:54 +0300 | [diff] [blame] | 194 | $(HEADER_BUILD)/qstrdefs.generated.h: $(PY_QSTR_DEFS) $(QSTR_DEFS) $(PY_SRC)/makeqstrdata.py mpconfigport.h $(MPCONFIGPORT_MK) $(PY_SRC)/mpconfig.h | $(HEADER_BUILD) |
Damien George | db52fd8 | 2015-05-30 23:14:34 +0100 | [diff] [blame] | 195 | $(ECHO) "GEN $@" |
| 196 | $(Q)cat $(PY_QSTR_DEFS) $(QSTR_DEFS) | $(SED) 's/^Q(.*)/"&"/' | $(CPP) $(CFLAGS) - | sed 's/^"\(Q(.*)\)"/\1/' > $(HEADER_BUILD)/qstrdefs.preprocessed.h |
| 197 | $(Q)$(PYTHON) $(PY_SRC)/makeqstrdata.py $(HEADER_BUILD)/qstrdefs.preprocessed.h > $@ |
Damien George | 55baff4 | 2014-01-21 21:40:13 +0000 | [diff] [blame] | 198 | |
| 199 | # emitters |
| 200 | |
Dave Hylands | c89c681 | 2014-01-24 01:05:30 -0800 | [diff] [blame] | 201 | $(PY_BUILD)/emitnx64.o: CFLAGS += -DN_X64 |
| 202 | $(PY_BUILD)/emitnx64.o: py/emitnative.c |
| 203 | $(call compile_c) |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 204 | |
Damien George | c90f59e | 2014-09-06 23:06:36 +0100 | [diff] [blame] | 205 | $(PY_BUILD)/emitnx86.o: CFLAGS += -DN_X86 |
| 206 | $(PY_BUILD)/emitnx86.o: py/emitnative.c |
| 207 | $(call compile_c) |
| 208 | |
Dave Hylands | c89c681 | 2014-01-24 01:05:30 -0800 | [diff] [blame] | 209 | $(PY_BUILD)/emitnthumb.o: CFLAGS += -DN_THUMB |
| 210 | $(PY_BUILD)/emitnthumb.o: py/emitnative.c |
| 211 | $(call compile_c) |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 212 | |
Fabian Vogt | fe3d16e | 2014-08-16 22:55:53 +0200 | [diff] [blame] | 213 | $(PY_BUILD)/emitnarm.o: CFLAGS += -DN_ARM |
| 214 | $(PY_BUILD)/emitnarm.o: py/emitnative.c |
| 215 | $(call compile_c) |
| 216 | |
Damien George | d3ebe48 | 2014-01-07 15:20:33 +0000 | [diff] [blame] | 217 | # optimising gc for speed; 5ms down to 4ms on pybv2 |
Paul Sokolovsky | 1c1d902c | 2014-04-24 02:59:43 +0300 | [diff] [blame] | 218 | $(PY_BUILD)/gc.o: CFLAGS += $(CSUPEROPT) |
Damien George | d3ebe48 | 2014-01-07 15:20:33 +0000 | [diff] [blame] | 219 | |
Damien George | 136f675 | 2014-01-07 14:54:15 +0000 | [diff] [blame] | 220 | # 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] | 221 | $(PY_BUILD)/vm.o: CFLAGS += $(CSUPEROPT) |
Paul Sokolovsky | 23f1b5f | 2014-12-28 07:44:09 +0200 | [diff] [blame] | 222 | # Optimizing vm.o for modern deeply pipelined CPUs with branch predictors |
| 223 | # may require disabling tail jump optimization. This will make sure that |
| 224 | # each opcode has its own dispatching jump which will improve branch |
| 225 | # branch predictor efficiency. |
| 226 | # http://article.gmane.org/gmane.comp.lang.lua.general/75426 |
| 227 | # http://hg.python.org/cpython/file/b127046831e2/Python/ceval.c#l828 |
| 228 | # http://www.emulators.com/docs/nx25_nostradamus.htm |
| 229 | #-fno-crossjumping |