blob: 98c60411561b3f71671a48485a636f80f668dbc3 [file] [log] [blame]
Damien George136f6752014-01-07 14:54:15 +00001# where py object files go (they have a name prefix to prevent filename clashes)
Dave Hylandsc89c6812014-01-24 01:05:30 -08002PY_BUILD = $(BUILD)/py
Damien George136f6752014-01-07 14:54:15 +00003
Andrew Scheller70a7d7a2014-04-16 22:10:33 +01004# where autogenerated header files go
Damien Georged553be52014-04-17 18:03:27 +01005HEADER_BUILD = $(BUILD)/genhdr
Andrew Scheller70a7d7a2014-04-16 22:10:33 +01006
7# file containing qstr defs for the core Python bit
Damien George55baff42014-01-21 21:40:13 +00008PY_QSTR_DEFS = $(PY_SRC)/qstrdefs.h
9
Paul Sokolovsky1c1d902c2014-04-24 02:59:43 +030010# some code is performance bottleneck and compiled with other optimization options
11CSUPEROPT = -O3
12
Damien George136f6752014-01-07 14:54:15 +000013# py object files
Damien George136f6752014-01-07 14:54:15 +000014PY_O_BASENAME = \
Damien Georgeb4b10fd2015-01-01 23:30:53 +000015 mpstate.o \
Damien George136f6752014-01-07 14:54:15 +000016 nlrx86.o \
17 nlrx64.o \
18 nlrthumb.o \
Damien George2399aa02014-11-27 20:29:33 +000019 nlrxtensa.o \
Paul Sokolovsky3a83b802014-04-17 00:16:45 +030020 nlrsetjmp.o \
Damien George136f6752014-01-07 14:54:15 +000021 malloc.o \
Damien Georged3ebe482014-01-07 15:20:33 +000022 gc.o \
Damien George136f6752014-01-07 14:54:15 +000023 qstr.o \
24 vstr.o \
Damien George7f9d1d62015-04-09 23:56:15 +010025 mpprint.o \
Damien George136f6752014-01-07 14:54:15 +000026 unicode.o \
Damien George438c88d2014-02-22 19:25:23 +000027 mpz.o \
Damien George136f6752014-01-07 14:54:15 +000028 lexer.o \
Damien George9193f892014-01-08 15:28:26 +000029 lexerstr.o \
Damien George136f6752014-01-07 14:54:15 +000030 lexerunix.o \
31 parse.o \
32 scope.o \
33 compile.o \
34 emitcommon.o \
Damien George136f6752014-01-07 14:54:15 +000035 emitcpy.o \
36 emitbc.o \
37 asmx64.o \
38 emitnx64.o \
Damien Georgec90f59e2014-09-06 23:06:36 +010039 asmx86.o \
40 emitnx86.o \
Damien George136f6752014-01-07 14:54:15 +000041 asmthumb.o \
42 emitnthumb.o \
43 emitinlinethumb.o \
Fabian Vogtfe3d16e2014-08-16 22:55:53 +020044 asmarm.o \
45 emitnarm.o \
Damien George8bfec2b2014-03-10 13:27:02 +000046 formatfloat.o \
Damien George06201ff2014-03-01 19:50:50 +000047 parsenumbase.o \
Damien George20773972014-02-22 18:12:43 +000048 parsenum.o \
Damien George2326d522014-03-27 23:26:35 +000049 emitglue.o \
Damien George136f6752014-01-07 14:54:15 +000050 runtime.o \
Damien George110ba352014-08-28 23:37:02 +010051 nativeglue.o \
Paul Sokolovsky23668692014-06-25 03:03:34 +030052 stackctrl.o \
Damien Georgea3f94e02014-04-20 00:13:22 +010053 argcheck.o \
Paul Sokolovsky8a8c1fc2015-01-01 09:29:28 +020054 warning.o \
Damien George136f6752014-01-07 14:54:15 +000055 map.o \
56 obj.o \
Paul Sokolovsky427905c2014-01-18 19:24:47 +020057 objarray.o \
Damien George136f6752014-01-07 14:54:15 +000058 objbool.o \
59 objboundmeth.o \
60 objcell.o \
Damien George136f6752014-01-07 14:54:15 +000061 objclosure.o \
62 objcomplex.o \
63 objdict.o \
John R. Lenton9daa7892014-01-14 23:55:01 +000064 objenumerate.o \
Damien George136f6752014-01-07 14:54:15 +000065 objexcept.o \
John R. Lentonfca456b2014-01-15 01:37:08 +000066 objfilter.o \
Damien George136f6752014-01-07 14:54:15 +000067 objfloat.o \
68 objfun.o \
69 objgenerator.o \
Damien George7c9c6672014-01-25 00:17:36 +000070 objgetitemiter.o \
Damien George136f6752014-01-07 14:54:15 +000071 objint.o \
Paul Sokolovsky966879c2014-01-17 20:01:36 +020072 objint_longlong.o \
Damien George438c88d2014-02-22 19:25:23 +000073 objint_mpz.o \
Damien George136f6752014-01-07 14:54:15 +000074 objlist.o \
John R. Lenton39b174e2014-01-15 01:10:09 +000075 objmap.o \
Damien George136f6752014-01-07 14:54:15 +000076 objmodule.o \
Damien George3ec0a1a2014-03-22 21:31:28 +000077 objobject.o \
Damien George777b0f32014-04-13 18:59:45 +010078 objproperty.o \
Damien George136f6752014-01-07 14:54:15 +000079 objnone.o \
Paul Sokolovskyd08fd682014-02-27 22:22:04 +020080 objnamedtuple.o \
Damien George136f6752014-01-07 14:54:15 +000081 objrange.o \
Damien George4c03b3a2014-08-12 18:33:40 +010082 objreversed.o \
Damien George136f6752014-01-07 14:54:15 +000083 objset.o \
84 objslice.o \
85 objstr.o \
Paul Sokolovsky97319122014-06-13 22:01:26 +030086 objstrunicode.o \
Paul Sokolovskycb9dc082014-04-26 20:26:14 +030087 objstringio.o \
Damien George136f6752014-01-07 14:54:15 +000088 objtuple.o \
89 objtype.o \
Damien George55baff42014-01-21 21:40:13 +000090 objzip.o \
Paul Sokolovsky68e7c512014-04-13 11:53:15 +030091 opmethods.o \
Paul Sokolovsky439542f2014-01-21 00:19:19 +020092 sequence.o \
Paul Sokolovskye98cf402014-01-08 02:43:48 +020093 stream.o \
Paul Sokolovsky8bc35162014-02-14 17:16:35 +020094 binary.o \
Damien George136f6752014-01-07 14:54:15 +000095 builtinimport.o \
Damien Georgeca476792014-02-03 22:44:10 +000096 builtinevex.o \
Damien Georgecaac5422014-03-25 14:18:18 +000097 modarray.o \
Damien George78d702c2014-12-09 16:19:48 +000098 modbuiltins.o \
Damien Georgecaac5422014-03-25 14:18:18 +000099 modcollections.o \
Paul Sokolovskyf9e54e02014-05-06 02:16:43 +0300100 modgc.o \
Paul Sokolovsky98a627d2014-04-03 14:57:53 +0300101 modio.o \
Damien Georgecaac5422014-03-25 14:18:18 +0000102 modmath.o \
Damien Georgedbdfee12014-04-17 17:11:03 +0100103 modcmath.o \
Damien Georgecaac5422014-03-25 14:18:18 +0000104 modmicropython.o \
Paul Sokolovskye9db8402014-04-10 03:45:38 +0300105 modstruct.o \
Paul Sokolovsky5500cde2014-04-13 06:43:18 +0300106 modsys.o \
Damien George136f6752014-01-07 14:54:15 +0000107 vm.o \
Damien Georgeb534e1b2014-09-04 14:44:01 +0100108 bc.o \
Damien George136f6752014-01-07 14:54:15 +0000109 showbc.o \
110 repl.o \
Damien Georgeecf5b772014-04-04 11:13:51 +0000111 smallint.o \
Paul Sokolovsky640e0b22015-01-20 11:52:12 +0200112 frozenmod.o \
Paul Sokolovsky510296f2014-08-08 22:51:40 +0300113 ../extmod/moductypes.o \
Damien George612045f2014-09-17 22:56:34 +0100114 ../extmod/modujson.o \
Paul Sokolovskyc71e0452014-09-12 18:48:07 +0300115 ../extmod/modure.o \
Paul Sokolovsky34162872014-10-12 08:16:34 -0700116 ../extmod/moduzlib.o \
Damien Georgef5d69792014-10-22 17:37:18 +0000117 ../extmod/moduheapq.o \
Paul Sokolovskyf4b19c82014-11-22 01:19:13 +0200118 ../extmod/moduhashlib.o \
Paul Sokolovskybfdc2052014-11-29 06:19:30 +0200119 ../extmod/modubinascii.o \
Damien George136f6752014-01-07 14:54:15 +0000120
121# prepend the build destination prefix to the py object files
Dave Hylandsc89c6812014-01-24 01:05:30 -0800122PY_O = $(addprefix $(PY_BUILD)/, $(PY_O_BASENAME))
Damien George136f6752014-01-07 14:54:15 +0000123
Dave Hylandsbf7d6902014-04-03 16:32:58 -0700124# Anything that depends on FORCE will be considered out-of-date
125FORCE:
126.PHONY: FORCE
127
Sven Wegenerbfb18a72014-11-05 21:02:43 +0100128$(HEADER_BUILD)/py-version.h: FORCE | $(HEADER_BUILD)
Dave Hylandsbf7d6902014-04-03 16:32:58 -0700129 $(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 George55baff42014-01-21 21:40:13 +0000132# qstr data
133
Damien Georged553be52014-04-17 18:03:27 +0100134# Adding an order only dependency on $(HEADER_BUILD) causes $(HEADER_BUILD) to get
Dave Hylandsc89c6812014-01-24 01:05:30 -0800135# created before we run the script to generate the .h
Damien Georged553be52014-04-17 18:03:27 +0100136$(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 George55baff42014-01-21 21:40:13 +0000139 $(ECHO) "makeqstrdata $(PY_QSTR_DEFS) $(QSTR_DEFS)"
Damien Georged553be52014-04-17 18:03:27 +0100140 $(Q)$(PYTHON) $(PY_SRC)/makeqstrdata.py $(HEADER_BUILD)/qstrdefs.preprocessed.h $(QSTR_DEFS) > $@
Damien George55baff42014-01-21 21:40:13 +0000141
142# emitters
143
Dave Hylandsc89c6812014-01-24 01:05:30 -0800144$(PY_BUILD)/emitnx64.o: CFLAGS += -DN_X64
145$(PY_BUILD)/emitnx64.o: py/emitnative.c
146 $(call compile_c)
Damien George136f6752014-01-07 14:54:15 +0000147
Damien Georgec90f59e2014-09-06 23:06:36 +0100148$(PY_BUILD)/emitnx86.o: CFLAGS += -DN_X86
149$(PY_BUILD)/emitnx86.o: py/emitnative.c
150 $(call compile_c)
151
Dave Hylandsc89c6812014-01-24 01:05:30 -0800152$(PY_BUILD)/emitnthumb.o: CFLAGS += -DN_THUMB
153$(PY_BUILD)/emitnthumb.o: py/emitnative.c
154 $(call compile_c)
Damien George136f6752014-01-07 14:54:15 +0000155
Fabian Vogtfe3d16e2014-08-16 22:55:53 +0200156$(PY_BUILD)/emitnarm.o: CFLAGS += -DN_ARM
157$(PY_BUILD)/emitnarm.o: py/emitnative.c
158 $(call compile_c)
159
Damien Georged3ebe482014-01-07 15:20:33 +0000160# optimising gc for speed; 5ms down to 4ms on pybv2
Paul Sokolovsky1c1d902c2014-04-24 02:59:43 +0300161$(PY_BUILD)/gc.o: CFLAGS += $(CSUPEROPT)
Damien Georged3ebe482014-01-07 15:20:33 +0000162
Damien George136f6752014-01-07 14:54:15 +0000163# optimising vm for speed, adds only a small amount to code size but makes a huge difference to speed (20% faster)
Paul Sokolovsky1c1d902c2014-04-24 02:59:43 +0300164$(PY_BUILD)/vm.o: CFLAGS += $(CSUPEROPT)
Paul Sokolovsky23f1b5f2014-12-28 07:44:09 +0200165# 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