blob: 4c4094eb66dc54c07f1bb919db7b2e9530e703f8 [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 = \
15 nlrx86.o \
16 nlrx64.o \
17 nlrthumb.o \
Damien George2399aa02014-11-27 20:29:33 +000018 nlrxtensa.o \
Paul Sokolovsky3a83b802014-04-17 00:16:45 +030019 nlrsetjmp.o \
Damien George136f6752014-01-07 14:54:15 +000020 malloc.o \
Damien Georged3ebe482014-01-07 15:20:33 +000021 gc.o \
Damien George136f6752014-01-07 14:54:15 +000022 qstr.o \
23 vstr.o \
24 unicode.o \
Damien George438c88d2014-02-22 19:25:23 +000025 mpz.o \
Damien George136f6752014-01-07 14:54:15 +000026 lexer.o \
Damien George9193f892014-01-08 15:28:26 +000027 lexerstr.o \
Damien George136f6752014-01-07 14:54:15 +000028 lexerunix.o \
29 parse.o \
Damien Georgec5966122014-02-15 16:10:44 +000030 parsehelper.o \
Damien George136f6752014-01-07 14:54:15 +000031 scope.o \
32 compile.o \
33 emitcommon.o \
34 emitpass1.o \
35 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 \
Dave Hylandsbaf6f142014-03-30 21:06:50 -0700112 pfenv.o \
Paul Sokolovskycb66f412014-07-13 23:07:42 +0300113 pfenv_printf.o \
Paul Sokolovsky510296f2014-08-08 22:51:40 +0300114 ../extmod/moductypes.o \
Damien George612045f2014-09-17 22:56:34 +0100115 ../extmod/modujson.o \
Paul Sokolovskyc71e0452014-09-12 18:48:07 +0300116 ../extmod/modure.o \
Paul Sokolovsky34162872014-10-12 08:16:34 -0700117 ../extmod/moduzlib.o \
Damien Georgef5d69792014-10-22 17:37:18 +0000118 ../extmod/moduheapq.o \
Paul Sokolovskyf4b19c82014-11-22 01:19:13 +0200119 ../extmod/moduhashlib.o \
Paul Sokolovskybfdc2052014-11-29 06:19:30 +0200120 ../extmod/modubinascii.o \
Damien George136f6752014-01-07 14:54:15 +0000121
122# prepend the build destination prefix to the py object files
Dave Hylandsc89c6812014-01-24 01:05:30 -0800123PY_O = $(addprefix $(PY_BUILD)/, $(PY_O_BASENAME))
Damien George136f6752014-01-07 14:54:15 +0000124
Dave Hylandsbf7d6902014-04-03 16:32:58 -0700125# Anything that depends on FORCE will be considered out-of-date
126FORCE:
127.PHONY: FORCE
128
Sven Wegenerbfb18a72014-11-05 21:02:43 +0100129$(HEADER_BUILD)/py-version.h: FORCE | $(HEADER_BUILD)
Dave Hylandsbf7d6902014-04-03 16:32:58 -0700130 $(Q)$(PY_SRC)/py-version.sh > $@.tmp
131 $(Q)if [ -f "$@" ] && cmp -s $@ $@.tmp; then rm $@.tmp; else echo "Generating $@"; mv $@.tmp $@; fi
132
Damien George55baff42014-01-21 21:40:13 +0000133# qstr data
134
Damien Georged553be52014-04-17 18:03:27 +0100135# Adding an order only dependency on $(HEADER_BUILD) causes $(HEADER_BUILD) to get
Dave Hylandsc89c6812014-01-24 01:05:30 -0800136# created before we run the script to generate the .h
Damien Georged553be52014-04-17 18:03:27 +0100137$(HEADER_BUILD)/qstrdefs.generated.h: $(PY_QSTR_DEFS) $(QSTR_DEFS) $(PY_SRC)/makeqstrdata.py mpconfigport.h $(PY_SRC)/mpconfig.h | $(HEADER_BUILD)
138 $(ECHO) "CPP $<"
139 $(Q)$(CPP) $(CFLAGS) $(PY_QSTR_DEFS) -o $(HEADER_BUILD)/qstrdefs.preprocessed.h
Damien George55baff42014-01-21 21:40:13 +0000140 $(ECHO) "makeqstrdata $(PY_QSTR_DEFS) $(QSTR_DEFS)"
Damien Georged553be52014-04-17 18:03:27 +0100141 $(Q)$(PYTHON) $(PY_SRC)/makeqstrdata.py $(HEADER_BUILD)/qstrdefs.preprocessed.h $(QSTR_DEFS) > $@
Damien George55baff42014-01-21 21:40:13 +0000142
143# emitters
144
Dave Hylandsc89c6812014-01-24 01:05:30 -0800145$(PY_BUILD)/emitnx64.o: CFLAGS += -DN_X64
146$(PY_BUILD)/emitnx64.o: py/emitnative.c
147 $(call compile_c)
Damien George136f6752014-01-07 14:54:15 +0000148
Damien Georgec90f59e2014-09-06 23:06:36 +0100149$(PY_BUILD)/emitnx86.o: CFLAGS += -DN_X86
150$(PY_BUILD)/emitnx86.o: py/emitnative.c
151 $(call compile_c)
152
Dave Hylandsc89c6812014-01-24 01:05:30 -0800153$(PY_BUILD)/emitnthumb.o: CFLAGS += -DN_THUMB
154$(PY_BUILD)/emitnthumb.o: py/emitnative.c
155 $(call compile_c)
Damien George136f6752014-01-07 14:54:15 +0000156
Fabian Vogtfe3d16e2014-08-16 22:55:53 +0200157$(PY_BUILD)/emitnarm.o: CFLAGS += -DN_ARM
158$(PY_BUILD)/emitnarm.o: py/emitnative.c
159 $(call compile_c)
160
Damien Georged3ebe482014-01-07 15:20:33 +0000161# optimising gc for speed; 5ms down to 4ms on pybv2
Paul Sokolovsky1c1d902c2014-04-24 02:59:43 +0300162$(PY_BUILD)/gc.o: CFLAGS += $(CSUPEROPT)
Damien Georged3ebe482014-01-07 15:20:33 +0000163
Damien George136f6752014-01-07 14:54:15 +0000164# 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 +0300165$(PY_BUILD)/vm.o: CFLAGS += $(CSUPEROPT)
Paul Sokolovsky23f1b5f2014-12-28 07:44:09 +0200166# Optimizing vm.o for modern deeply pipelined CPUs with branch predictors
167# may require disabling tail jump optimization. This will make sure that
168# each opcode has its own dispatching jump which will improve branch
169# branch predictor efficiency.
170# http://article.gmane.org/gmane.comp.lang.lua.general/75426
171# http://hg.python.org/cpython/file/b127046831e2/Python/ceval.c#l828
172# http://www.emulators.com/docs/nx25_nostradamus.htm
173#-fno-crossjumping