2014-01-07 18:54:15 +04:00
|
|
|
# where py object files go (they have a name prefix to prevent filename clashes)
|
2014-01-24 13:05:30 +04:00
|
|
|
PY_BUILD = $(BUILD)/py
|
2014-01-07 18:54:15 +04:00
|
|
|
|
2014-04-17 01:10:33 +04:00
|
|
|
# where autogenerated header files go
|
2014-04-17 21:03:27 +04:00
|
|
|
HEADER_BUILD = $(BUILD)/genhdr
|
2014-01-22 01:40:13 +04:00
|
|
|
|
2014-04-17 01:10:33 +04:00
|
|
|
# file containing qstr defs for the core Python bit
|
2014-01-22 01:40:13 +04:00
|
|
|
PY_QSTR_DEFS = $(PY_SRC)/qstrdefs.h
|
|
|
|
|
2014-04-24 03:59:43 +04:00
|
|
|
# some code is performance bottleneck and compiled with other optimization options
|
|
|
|
CSUPEROPT = -O3
|
|
|
|
|
2014-01-07 18:54:15 +04:00
|
|
|
# py object files
|
|
|
|
PY_O_BASENAME = \
|
|
|
|
nlrx86.o \
|
|
|
|
nlrx64.o \
|
|
|
|
nlrthumb.o \
|
2014-11-27 23:29:33 +03:00
|
|
|
nlrxtensa.o \
|
2014-04-17 01:16:45 +04:00
|
|
|
nlrsetjmp.o \
|
2014-01-07 18:54:15 +04:00
|
|
|
malloc.o \
|
2014-01-07 19:20:33 +04:00
|
|
|
gc.o \
|
2014-01-07 18:54:15 +04:00
|
|
|
qstr.o \
|
|
|
|
vstr.o \
|
|
|
|
unicode.o \
|
2014-02-22 23:25:23 +04:00
|
|
|
mpz.o \
|
2014-01-07 18:54:15 +04:00
|
|
|
lexer.o \
|
2014-01-08 19:28:26 +04:00
|
|
|
lexerstr.o \
|
2014-01-07 18:54:15 +04:00
|
|
|
lexerunix.o \
|
|
|
|
parse.o \
|
2014-02-15 20:10:44 +04:00
|
|
|
parsehelper.o \
|
2014-01-07 18:54:15 +04:00
|
|
|
scope.o \
|
|
|
|
compile.o \
|
|
|
|
emitcommon.o \
|
|
|
|
emitpass1.o \
|
|
|
|
emitcpy.o \
|
|
|
|
emitbc.o \
|
|
|
|
asmx64.o \
|
|
|
|
emitnx64.o \
|
2014-09-07 02:06:36 +04:00
|
|
|
asmx86.o \
|
|
|
|
emitnx86.o \
|
2014-01-07 18:54:15 +04:00
|
|
|
asmthumb.o \
|
|
|
|
emitnthumb.o \
|
|
|
|
emitinlinethumb.o \
|
2014-08-17 00:55:53 +04:00
|
|
|
asmarm.o \
|
|
|
|
emitnarm.o \
|
2014-03-10 17:27:02 +04:00
|
|
|
formatfloat.o \
|
2014-03-01 23:50:50 +04:00
|
|
|
parsenumbase.o \
|
2014-02-22 22:12:43 +04:00
|
|
|
parsenum.o \
|
2014-03-28 03:26:35 +04:00
|
|
|
emitglue.o \
|
2014-01-07 18:54:15 +04:00
|
|
|
runtime.o \
|
2014-08-29 02:37:02 +04:00
|
|
|
nativeglue.o \
|
2014-06-25 04:03:34 +04:00
|
|
|
stackctrl.o \
|
2014-04-20 03:13:22 +04:00
|
|
|
argcheck.o \
|
2015-01-01 10:29:28 +03:00
|
|
|
warning.o \
|
2014-01-07 18:54:15 +04:00
|
|
|
map.o \
|
|
|
|
obj.o \
|
2014-01-18 21:24:47 +04:00
|
|
|
objarray.o \
|
2014-01-07 18:54:15 +04:00
|
|
|
objbool.o \
|
|
|
|
objboundmeth.o \
|
|
|
|
objcell.o \
|
|
|
|
objclosure.o \
|
|
|
|
objcomplex.o \
|
|
|
|
objdict.o \
|
2014-01-15 03:55:01 +04:00
|
|
|
objenumerate.o \
|
2014-01-07 18:54:15 +04:00
|
|
|
objexcept.o \
|
2014-01-15 05:37:08 +04:00
|
|
|
objfilter.o \
|
2014-01-07 18:54:15 +04:00
|
|
|
objfloat.o \
|
|
|
|
objfun.o \
|
|
|
|
objgenerator.o \
|
2014-01-25 04:17:36 +04:00
|
|
|
objgetitemiter.o \
|
2014-01-07 18:54:15 +04:00
|
|
|
objint.o \
|
2014-01-17 22:01:36 +04:00
|
|
|
objint_longlong.o \
|
2014-02-22 23:25:23 +04:00
|
|
|
objint_mpz.o \
|
2014-01-07 18:54:15 +04:00
|
|
|
objlist.o \
|
2014-01-15 05:10:09 +04:00
|
|
|
objmap.o \
|
2014-01-07 18:54:15 +04:00
|
|
|
objmodule.o \
|
2014-03-23 01:31:28 +04:00
|
|
|
objobject.o \
|
2014-04-13 21:59:45 +04:00
|
|
|
objproperty.o \
|
2014-01-07 18:54:15 +04:00
|
|
|
objnone.o \
|
2014-02-28 00:22:04 +04:00
|
|
|
objnamedtuple.o \
|
2014-01-07 18:54:15 +04:00
|
|
|
objrange.o \
|
2014-08-12 21:33:40 +04:00
|
|
|
objreversed.o \
|
2014-01-07 18:54:15 +04:00
|
|
|
objset.o \
|
|
|
|
objslice.o \
|
|
|
|
objstr.o \
|
2014-06-13 23:01:26 +04:00
|
|
|
objstrunicode.o \
|
2014-04-26 21:26:14 +04:00
|
|
|
objstringio.o \
|
2014-01-07 18:54:15 +04:00
|
|
|
objtuple.o \
|
|
|
|
objtype.o \
|
2014-01-22 01:40:13 +04:00
|
|
|
objzip.o \
|
2014-04-13 12:53:15 +04:00
|
|
|
opmethods.o \
|
2014-01-21 02:19:19 +04:00
|
|
|
sequence.o \
|
2014-01-08 04:43:48 +04:00
|
|
|
stream.o \
|
2014-02-14 19:16:35 +04:00
|
|
|
binary.o \
|
2014-01-07 18:54:15 +04:00
|
|
|
builtinimport.o \
|
2014-02-04 02:44:10 +04:00
|
|
|
builtinevex.o \
|
2014-03-25 18:18:18 +04:00
|
|
|
modarray.o \
|
2014-12-09 19:19:48 +03:00
|
|
|
modbuiltins.o \
|
2014-03-25 18:18:18 +04:00
|
|
|
modcollections.o \
|
2014-05-06 03:16:43 +04:00
|
|
|
modgc.o \
|
2014-04-03 15:57:53 +04:00
|
|
|
modio.o \
|
2014-03-25 18:18:18 +04:00
|
|
|
modmath.o \
|
2014-04-17 20:11:03 +04:00
|
|
|
modcmath.o \
|
2014-03-25 18:18:18 +04:00
|
|
|
modmicropython.o \
|
2014-04-10 04:45:38 +04:00
|
|
|
modstruct.o \
|
2014-04-13 07:43:18 +04:00
|
|
|
modsys.o \
|
2014-01-07 18:54:15 +04:00
|
|
|
vm.o \
|
2014-09-04 17:44:01 +04:00
|
|
|
bc.o \
|
2014-01-07 18:54:15 +04:00
|
|
|
showbc.o \
|
|
|
|
repl.o \
|
2014-04-04 15:13:51 +04:00
|
|
|
smallint.o \
|
2014-03-31 08:06:50 +04:00
|
|
|
pfenv.o \
|
2014-07-14 00:07:42 +04:00
|
|
|
pfenv_printf.o \
|
2014-08-08 23:51:40 +04:00
|
|
|
../extmod/moductypes.o \
|
2014-09-18 01:56:34 +04:00
|
|
|
../extmod/modujson.o \
|
2014-09-12 19:48:07 +04:00
|
|
|
../extmod/modure.o \
|
2014-10-12 19:16:34 +04:00
|
|
|
../extmod/moduzlib.o \
|
2014-10-22 21:37:18 +04:00
|
|
|
../extmod/moduheapq.o \
|
2014-11-22 02:19:13 +03:00
|
|
|
../extmod/moduhashlib.o \
|
2014-11-29 07:19:30 +03:00
|
|
|
../extmod/modubinascii.o \
|
2014-01-07 18:54:15 +04:00
|
|
|
|
|
|
|
# prepend the build destination prefix to the py object files
|
2014-01-24 13:05:30 +04:00
|
|
|
PY_O = $(addprefix $(PY_BUILD)/, $(PY_O_BASENAME))
|
2014-01-07 18:54:15 +04:00
|
|
|
|
2014-04-04 03:32:58 +04:00
|
|
|
# Anything that depends on FORCE will be considered out-of-date
|
|
|
|
FORCE:
|
|
|
|
.PHONY: FORCE
|
|
|
|
|
2014-11-05 23:02:43 +03:00
|
|
|
$(HEADER_BUILD)/py-version.h: FORCE | $(HEADER_BUILD)
|
2014-04-04 03:32:58 +04:00
|
|
|
$(Q)$(PY_SRC)/py-version.sh > $@.tmp
|
|
|
|
$(Q)if [ -f "$@" ] && cmp -s $@ $@.tmp; then rm $@.tmp; else echo "Generating $@"; mv $@.tmp $@; fi
|
|
|
|
|
2014-01-22 01:40:13 +04:00
|
|
|
# qstr data
|
|
|
|
|
2014-04-17 21:03:27 +04:00
|
|
|
# Adding an order only dependency on $(HEADER_BUILD) causes $(HEADER_BUILD) to get
|
2014-01-24 13:05:30 +04:00
|
|
|
# created before we run the script to generate the .h
|
2014-04-17 21:03:27 +04:00
|
|
|
$(HEADER_BUILD)/qstrdefs.generated.h: $(PY_QSTR_DEFS) $(QSTR_DEFS) $(PY_SRC)/makeqstrdata.py mpconfigport.h $(PY_SRC)/mpconfig.h | $(HEADER_BUILD)
|
|
|
|
$(ECHO) "CPP $<"
|
|
|
|
$(Q)$(CPP) $(CFLAGS) $(PY_QSTR_DEFS) -o $(HEADER_BUILD)/qstrdefs.preprocessed.h
|
2014-01-22 01:40:13 +04:00
|
|
|
$(ECHO) "makeqstrdata $(PY_QSTR_DEFS) $(QSTR_DEFS)"
|
2014-04-17 21:03:27 +04:00
|
|
|
$(Q)$(PYTHON) $(PY_SRC)/makeqstrdata.py $(HEADER_BUILD)/qstrdefs.preprocessed.h $(QSTR_DEFS) > $@
|
2014-01-22 01:40:13 +04:00
|
|
|
|
2014-01-24 13:05:30 +04:00
|
|
|
# emitters
|
2014-01-22 01:40:13 +04:00
|
|
|
|
2014-01-24 13:05:30 +04:00
|
|
|
$(PY_BUILD)/emitnx64.o: CFLAGS += -DN_X64
|
|
|
|
$(PY_BUILD)/emitnx64.o: py/emitnative.c
|
|
|
|
$(call compile_c)
|
2014-01-07 18:54:15 +04:00
|
|
|
|
2014-09-07 02:06:36 +04:00
|
|
|
$(PY_BUILD)/emitnx86.o: CFLAGS += -DN_X86
|
|
|
|
$(PY_BUILD)/emitnx86.o: py/emitnative.c
|
|
|
|
$(call compile_c)
|
|
|
|
|
2014-01-24 13:05:30 +04:00
|
|
|
$(PY_BUILD)/emitnthumb.o: CFLAGS += -DN_THUMB
|
|
|
|
$(PY_BUILD)/emitnthumb.o: py/emitnative.c
|
|
|
|
$(call compile_c)
|
2014-01-07 18:54:15 +04:00
|
|
|
|
2014-08-17 00:55:53 +04:00
|
|
|
$(PY_BUILD)/emitnarm.o: CFLAGS += -DN_ARM
|
|
|
|
$(PY_BUILD)/emitnarm.o: py/emitnative.c
|
|
|
|
$(call compile_c)
|
|
|
|
|
2014-01-07 19:20:33 +04:00
|
|
|
# optimising gc for speed; 5ms down to 4ms on pybv2
|
2014-04-24 03:59:43 +04:00
|
|
|
$(PY_BUILD)/gc.o: CFLAGS += $(CSUPEROPT)
|
2014-01-07 19:20:33 +04:00
|
|
|
|
2014-01-07 18:54:15 +04:00
|
|
|
# optimising vm for speed, adds only a small amount to code size but makes a huge difference to speed (20% faster)
|
2014-04-24 03:59:43 +04:00
|
|
|
$(PY_BUILD)/vm.o: CFLAGS += $(CSUPEROPT)
|
2014-12-28 08:44:09 +03:00
|
|
|
# Optimizing vm.o for modern deeply pipelined CPUs with branch predictors
|
|
|
|
# may require disabling tail jump optimization. This will make sure that
|
|
|
|
# each opcode has its own dispatching jump which will improve branch
|
|
|
|
# branch predictor efficiency.
|
|
|
|
# http://article.gmane.org/gmane.comp.lang.lua.general/75426
|
|
|
|
# http://hg.python.org/cpython/file/b127046831e2/Python/ceval.c#l828
|
|
|
|
# http://www.emulators.com/docs/nx25_nostradamus.htm
|
|
|
|
#-fno-crossjumping
|