2014-01-07 14:54:15 +00:00
|
|
|
# where py object files go (they have a name prefix to prevent filename clashes)
|
2014-01-24 09:05:30 +00:00
|
|
|
PY_BUILD = $(BUILD)/py
|
2014-01-07 14:54:15 +00:00
|
|
|
|
2014-04-16 22:10:33 +01:00
|
|
|
# where autogenerated header files go
|
2014-04-17 18:03:27 +01:00
|
|
|
HEADER_BUILD = $(BUILD)/genhdr
|
2014-01-21 21:40:13 +00:00
|
|
|
|
2014-04-16 22:10:33 +01:00
|
|
|
# file containing qstr defs for the core Python bit
|
2014-01-21 21:40:13 +00:00
|
|
|
PY_QSTR_DEFS = $(PY_SRC)/qstrdefs.h
|
|
|
|
|
2016-03-16 07:47:40 +00:00
|
|
|
# If qstr autogeneration is not disabled we specify the output header
|
|
|
|
# for all collected qstrings.
|
|
|
|
ifneq ($(QSTR_AUTOGEN_DISABLE),1)
|
py: Add rules for automated extraction of qstrs from sources.
- add template rule that converts a specified source file into a qstring file
- add special rule for generating a central header that contains all
extracted/autogenerated strings - defined by QSTR_DEFS_COLLECTED
variable. Each platform appends a list of sources that may contain
qstrings into a new build variable: SRC_QSTR. Any autogenerated
prerequisities are should be appened to SRC_QSTR_AUTO_DEPS variable.
- remove most qstrings from py/qstrdefs, keep only qstrings that
contain special characters - these cannot be easily detected in the
sources without additional annotations
- remove most manual qstrdefs, use qstrdef autogen for: py, cc3200,
stmhal, teensy, unix, windows, pic16bit:
- remove all micropython generic qstrdefs except for the special strings that contain special characters (e.g. /,+,<,> etc.)
- remove all port specific qstrdefs except for special strings
- append sources for qstr generation in platform makefiles (SRC_QSTR)
2016-03-10 09:22:41 +00:00
|
|
|
QSTR_DEFS_COLLECTED = $(HEADER_BUILD)/qstrdefs.collected.h
|
2016-03-16 07:47:40 +00:00
|
|
|
endif
|
py: Add rules for automated extraction of qstrs from sources.
- add template rule that converts a specified source file into a qstring file
- add special rule for generating a central header that contains all
extracted/autogenerated strings - defined by QSTR_DEFS_COLLECTED
variable. Each platform appends a list of sources that may contain
qstrings into a new build variable: SRC_QSTR. Any autogenerated
prerequisities are should be appened to SRC_QSTR_AUTO_DEPS variable.
- remove most qstrings from py/qstrdefs, keep only qstrings that
contain special characters - these cannot be easily detected in the
sources without additional annotations
- remove most manual qstrdefs, use qstrdef autogen for: py, cc3200,
stmhal, teensy, unix, windows, pic16bit:
- remove all micropython generic qstrdefs except for the special strings that contain special characters (e.g. /,+,<,> etc.)
- remove all port specific qstrdefs except for special strings
- append sources for qstr generation in platform makefiles (SRC_QSTR)
2016-03-10 09:22:41 +00:00
|
|
|
|
2014-04-24 00:59:43 +01:00
|
|
|
# some code is performance bottleneck and compiled with other optimization options
|
|
|
|
CSUPEROPT = -O3
|
|
|
|
|
2015-10-19 16:22:16 +01:00
|
|
|
INC += -I../lib/netutils
|
|
|
|
|
2015-10-06 16:10:00 +01:00
|
|
|
ifeq ($(MICROPY_PY_USSL),1)
|
|
|
|
CFLAGS_MOD += -DMICROPY_PY_USSL=1 -I../lib/axtls/ssl -I../lib/axtls/crypto -I../lib/axtls/config
|
|
|
|
LDFLAGS_MOD += -L../lib/axtls/_stage -laxtls
|
|
|
|
endif
|
|
|
|
|
2015-10-26 21:04:33 +00:00
|
|
|
#ifeq ($(MICROPY_PY_LWIP),1)
|
|
|
|
#CFLAGS_MOD += -DMICROPY_PY_LWIP=1 -I../lib/lwip/src/include -I../lib/lwip/src/include/ipv4 -I../extmod/lwip-include
|
|
|
|
#endif
|
|
|
|
|
|
|
|
ifeq ($(MICROPY_PY_LWIP),1)
|
|
|
|
LWIP_DIR = lib/lwip/src
|
|
|
|
INC += -I../lib/lwip/src/include -I../lib/lwip/src/include/ipv4 -I../extmod/lwip-include
|
|
|
|
CFLAGS_MOD += -DMICROPY_PY_LWIP=1
|
|
|
|
SRC_MOD += extmod/modlwip.c lib/netutils/netutils.c
|
|
|
|
SRC_MOD += $(addprefix $(LWIP_DIR)/,\
|
|
|
|
core/def.c \
|
|
|
|
core/dns.c \
|
|
|
|
core/init.c \
|
|
|
|
core/mem.c \
|
|
|
|
core/memp.c \
|
|
|
|
core/netif.c \
|
|
|
|
core/pbuf.c \
|
|
|
|
core/raw.c \
|
|
|
|
core/stats.c \
|
|
|
|
core/sys.c \
|
|
|
|
core/tcp.c \
|
|
|
|
core/tcp_in.c \
|
|
|
|
core/tcp_out.c \
|
|
|
|
core/timers.c \
|
|
|
|
core/udp.c \
|
|
|
|
core/ipv4/autoip.c \
|
|
|
|
core/ipv4/icmp.c \
|
|
|
|
core/ipv4/igmp.c \
|
|
|
|
core/ipv4/inet.c \
|
|
|
|
core/ipv4/inet_chksum.c \
|
|
|
|
core/ipv4/ip_addr.c \
|
|
|
|
core/ipv4/ip.c \
|
|
|
|
core/ipv4/ip_frag.c \
|
|
|
|
)
|
|
|
|
ifeq ($(MICROPY_PY_LWIP_SLIP),1)
|
|
|
|
CFLAGS_MOD += -DMICROPY_PY_LWIP_SLIP=1
|
|
|
|
SRC_MOD += $(LWIP_DIR)/netif/slipif.c
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2014-01-07 14:54:15 +00:00
|
|
|
# py object files
|
|
|
|
PY_O_BASENAME = \
|
2015-01-01 23:30:53 +00:00
|
|
|
mpstate.o \
|
2014-01-07 14:54:15 +00:00
|
|
|
nlrx86.o \
|
|
|
|
nlrx64.o \
|
|
|
|
nlrthumb.o \
|
2014-11-27 20:29:33 +00:00
|
|
|
nlrxtensa.o \
|
2014-04-16 22:16:45 +01:00
|
|
|
nlrsetjmp.o \
|
2014-01-07 14:54:15 +00:00
|
|
|
malloc.o \
|
2014-01-07 15:20:33 +00:00
|
|
|
gc.o \
|
2014-01-07 14:54:15 +00:00
|
|
|
qstr.o \
|
|
|
|
vstr.o \
|
2015-04-09 23:56:15 +01:00
|
|
|
mpprint.o \
|
2014-01-07 14:54:15 +00:00
|
|
|
unicode.o \
|
2014-02-22 19:25:23 +00:00
|
|
|
mpz.o \
|
2014-01-07 14:54:15 +00:00
|
|
|
lexer.o \
|
2014-01-08 15:28:26 +00:00
|
|
|
lexerstr.o \
|
2014-01-07 14:54:15 +00:00
|
|
|
lexerunix.o \
|
|
|
|
parse.o \
|
|
|
|
scope.o \
|
|
|
|
compile.o \
|
|
|
|
emitcommon.o \
|
|
|
|
emitbc.o \
|
|
|
|
asmx64.o \
|
|
|
|
emitnx64.o \
|
2014-09-06 23:06:36 +01:00
|
|
|
asmx86.o \
|
|
|
|
emitnx86.o \
|
2014-01-07 14:54:15 +00:00
|
|
|
asmthumb.o \
|
|
|
|
emitnthumb.o \
|
|
|
|
emitinlinethumb.o \
|
2014-08-16 21:55:53 +01:00
|
|
|
asmarm.o \
|
|
|
|
emitnarm.o \
|
2014-03-10 13:27:02 +00:00
|
|
|
formatfloat.o \
|
2014-03-01 19:50:50 +00:00
|
|
|
parsenumbase.o \
|
2014-02-22 18:12:43 +00:00
|
|
|
parsenum.o \
|
2014-03-27 23:26:35 +00:00
|
|
|
emitglue.o \
|
2014-01-07 14:54:15 +00:00
|
|
|
runtime.o \
|
2016-04-25 17:28:12 +01:00
|
|
|
runtime_utils.o \
|
2014-08-28 23:37:02 +01:00
|
|
|
nativeglue.o \
|
2014-06-25 01:03:34 +01:00
|
|
|
stackctrl.o \
|
2014-04-20 00:13:22 +01:00
|
|
|
argcheck.o \
|
2015-01-01 07:29:28 +00:00
|
|
|
warning.o \
|
2014-01-07 14:54:15 +00:00
|
|
|
map.o \
|
|
|
|
obj.o \
|
2014-01-18 17:24:47 +00:00
|
|
|
objarray.o \
|
2015-04-21 15:14:24 +01:00
|
|
|
objattrtuple.o \
|
2014-01-07 14:54:15 +00:00
|
|
|
objbool.o \
|
|
|
|
objboundmeth.o \
|
|
|
|
objcell.o \
|
|
|
|
objclosure.o \
|
|
|
|
objcomplex.o \
|
|
|
|
objdict.o \
|
2014-01-14 23:55:01 +00:00
|
|
|
objenumerate.o \
|
2014-01-07 14:54:15 +00:00
|
|
|
objexcept.o \
|
2014-01-15 01:37:08 +00:00
|
|
|
objfilter.o \
|
2014-01-07 14:54:15 +00:00
|
|
|
objfloat.o \
|
|
|
|
objfun.o \
|
|
|
|
objgenerator.o \
|
2014-01-25 00:17:36 +00:00
|
|
|
objgetitemiter.o \
|
2014-01-07 14:54:15 +00:00
|
|
|
objint.o \
|
2014-01-17 18:01:36 +00:00
|
|
|
objint_longlong.o \
|
2014-02-22 19:25:23 +00:00
|
|
|
objint_mpz.o \
|
2014-01-07 14:54:15 +00:00
|
|
|
objlist.o \
|
2014-01-15 01:10:09 +00:00
|
|
|
objmap.o \
|
2014-01-07 14:54:15 +00:00
|
|
|
objmodule.o \
|
2014-03-22 21:31:28 +00:00
|
|
|
objobject.o \
|
2015-12-14 21:48:12 +00:00
|
|
|
objpolyiter.o \
|
2014-04-13 18:59:45 +01:00
|
|
|
objproperty.o \
|
2014-01-07 14:54:15 +00:00
|
|
|
objnone.o \
|
2014-02-27 20:22:04 +00:00
|
|
|
objnamedtuple.o \
|
2014-01-07 14:54:15 +00:00
|
|
|
objrange.o \
|
2014-08-12 18:33:40 +01:00
|
|
|
objreversed.o \
|
2014-01-07 14:54:15 +00:00
|
|
|
objset.o \
|
2015-05-05 20:18:07 +01:00
|
|
|
objsingleton.o \
|
2014-01-07 14:54:15 +00:00
|
|
|
objslice.o \
|
|
|
|
objstr.o \
|
2014-06-13 20:01:26 +01:00
|
|
|
objstrunicode.o \
|
2014-04-26 18:26:14 +01:00
|
|
|
objstringio.o \
|
2014-01-07 14:54:15 +00:00
|
|
|
objtuple.o \
|
|
|
|
objtype.o \
|
2014-01-21 21:40:13 +00:00
|
|
|
objzip.o \
|
2014-04-13 09:53:15 +01:00
|
|
|
opmethods.o \
|
2014-01-20 22:19:19 +00:00
|
|
|
sequence.o \
|
2014-01-08 00:43:48 +00:00
|
|
|
stream.o \
|
2014-02-14 15:16:35 +00:00
|
|
|
binary.o \
|
2014-01-07 14:54:15 +00:00
|
|
|
builtinimport.o \
|
2014-02-03 22:44:10 +00:00
|
|
|
builtinevex.o \
|
2014-03-25 14:18:18 +00:00
|
|
|
modarray.o \
|
2014-12-09 16:19:48 +00:00
|
|
|
modbuiltins.o \
|
2014-03-25 14:18:18 +00:00
|
|
|
modcollections.o \
|
2014-05-06 00:16:43 +01:00
|
|
|
modgc.o \
|
2014-04-03 12:57:53 +01:00
|
|
|
modio.o \
|
2014-03-25 14:18:18 +00:00
|
|
|
modmath.o \
|
2014-04-17 17:11:03 +01:00
|
|
|
modcmath.o \
|
2014-03-25 14:18:18 +00:00
|
|
|
modmicropython.o \
|
2014-04-10 01:45:38 +01:00
|
|
|
modstruct.o \
|
2014-04-13 04:43:18 +01:00
|
|
|
modsys.o \
|
2016-05-10 10:54:25 +01:00
|
|
|
moduerrno.o \
|
2014-01-07 14:54:15 +00:00
|
|
|
vm.o \
|
2014-09-04 14:44:01 +01:00
|
|
|
bc.o \
|
2014-01-07 14:54:15 +00:00
|
|
|
showbc.o \
|
|
|
|
repl.o \
|
2014-04-04 12:13:51 +01:00
|
|
|
smallint.o \
|
2015-01-20 09:52:12 +00:00
|
|
|
frozenmod.o \
|
2014-08-08 20:51:40 +01:00
|
|
|
../extmod/moductypes.o \
|
2014-09-17 22:56:34 +01:00
|
|
|
../extmod/modujson.o \
|
2014-09-12 16:48:07 +01:00
|
|
|
../extmod/modure.o \
|
2014-10-12 16:16:34 +01:00
|
|
|
../extmod/moduzlib.o \
|
2014-10-22 18:37:18 +01:00
|
|
|
../extmod/moduheapq.o \
|
2014-11-21 23:19:13 +00:00
|
|
|
../extmod/moduhashlib.o \
|
2014-11-29 04:19:30 +00:00
|
|
|
../extmod/modubinascii.o \
|
2015-12-12 22:15:33 +00:00
|
|
|
../extmod/machine_mem.o \
|
2016-04-12 13:42:35 +01:00
|
|
|
../extmod/machine_i2c.o \
|
2015-10-06 16:10:00 +01:00
|
|
|
../extmod/modussl.o \
|
2016-01-17 10:10:28 +00:00
|
|
|
../extmod/modurandom.o \
|
2016-03-24 17:14:12 +00:00
|
|
|
../extmod/modwebsocket.o \
|
2016-04-28 22:52:52 +01:00
|
|
|
../extmod/modwebrepl.o \
|
2016-04-08 11:08:37 +01:00
|
|
|
../extmod/modframebuf.o \
|
2015-11-24 22:43:11 +00:00
|
|
|
../extmod/fsusermount.o \
|
2016-02-13 21:03:23 +00:00
|
|
|
../extmod/vfs_fat.o \
|
2016-02-14 22:19:27 +00:00
|
|
|
../extmod/vfs_fat_ffconf.o \
|
2016-02-14 22:08:37 +00:00
|
|
|
../extmod/vfs_fat_diskio.o \
|
2016-02-14 22:16:46 +00:00
|
|
|
../extmod/vfs_fat_file.o \
|
2016-03-03 11:25:44 +00:00
|
|
|
../extmod/vfs_fat_lexer.o \
|
2016-02-28 15:17:24 +00:00
|
|
|
../extmod/vfs_fat_misc.o \
|
2016-01-01 11:02:53 +00:00
|
|
|
../extmod/moduos_dupterm.o \
|
2014-01-07 14:54:15 +00:00
|
|
|
|
|
|
|
# prepend the build destination prefix to the py object files
|
2014-01-24 09:05:30 +00:00
|
|
|
PY_O = $(addprefix $(PY_BUILD)/, $(PY_O_BASENAME))
|
2014-01-07 14:54:15 +00:00
|
|
|
|
py: Add rules for automated extraction of qstrs from sources.
- add template rule that converts a specified source file into a qstring file
- add special rule for generating a central header that contains all
extracted/autogenerated strings - defined by QSTR_DEFS_COLLECTED
variable. Each platform appends a list of sources that may contain
qstrings into a new build variable: SRC_QSTR. Any autogenerated
prerequisities are should be appened to SRC_QSTR_AUTO_DEPS variable.
- remove most qstrings from py/qstrdefs, keep only qstrings that
contain special characters - these cannot be easily detected in the
sources without additional annotations
- remove most manual qstrdefs, use qstrdef autogen for: py, cc3200,
stmhal, teensy, unix, windows, pic16bit:
- remove all micropython generic qstrdefs except for the special strings that contain special characters (e.g. /,+,<,> etc.)
- remove all port specific qstrdefs except for special strings
- append sources for qstr generation in platform makefiles (SRC_QSTR)
2016-03-10 09:22:41 +00:00
|
|
|
# Sources that may contain qstrings
|
|
|
|
SRC_QSTR_IGNORE = nlr% emitnx% emitnthumb% emitnarm%
|
|
|
|
SRC_QSTR = $(SRC_MOD) $(addprefix py/,$(filter-out $(SRC_QSTR_IGNORE),$(PY_O_BASENAME:.o=.c)) emitnative.c)
|
|
|
|
|
2014-04-04 00:32:58 +01:00
|
|
|
# Anything that depends on FORCE will be considered out-of-date
|
|
|
|
FORCE:
|
|
|
|
.PHONY: FORCE
|
|
|
|
|
2015-04-22 17:38:05 +01:00
|
|
|
$(HEADER_BUILD)/mpversion.h: FORCE | $(HEADER_BUILD)
|
|
|
|
$(Q)$(PYTHON) $(PY_SRC)/makeversionhdr.py $@
|
2014-04-04 00:32:58 +01:00
|
|
|
|
2015-06-10 23:24:54 +01:00
|
|
|
# mpconfigport.mk is optional, but changes to it may drastically change
|
|
|
|
# overall config, so they need to be caught
|
|
|
|
MPCONFIGPORT_MK = $(wildcard mpconfigport.mk)
|
|
|
|
|
2014-01-21 21:40:13 +00:00
|
|
|
# qstr data
|
2014-04-17 18:03:27 +01:00
|
|
|
# Adding an order only dependency on $(HEADER_BUILD) causes $(HEADER_BUILD) to get
|
2014-01-24 09:05:30 +00:00
|
|
|
# created before we run the script to generate the .h
|
2015-05-30 23:14:34 +01:00
|
|
|
# Note: we need to protect the qstr names from the preprocessor, so we wrap
|
|
|
|
# the lines in "" and then unwrap after the preprocessor is finished.
|
py: Add rules for automated extraction of qstrs from sources.
- add template rule that converts a specified source file into a qstring file
- add special rule for generating a central header that contains all
extracted/autogenerated strings - defined by QSTR_DEFS_COLLECTED
variable. Each platform appends a list of sources that may contain
qstrings into a new build variable: SRC_QSTR. Any autogenerated
prerequisities are should be appened to SRC_QSTR_AUTO_DEPS variable.
- remove most qstrings from py/qstrdefs, keep only qstrings that
contain special characters - these cannot be easily detected in the
sources without additional annotations
- remove most manual qstrdefs, use qstrdef autogen for: py, cc3200,
stmhal, teensy, unix, windows, pic16bit:
- remove all micropython generic qstrdefs except for the special strings that contain special characters (e.g. /,+,<,> etc.)
- remove all port specific qstrdefs except for special strings
- append sources for qstr generation in platform makefiles (SRC_QSTR)
2016-03-10 09:22:41 +00:00
|
|
|
$(HEADER_BUILD)/qstrdefs.generated.h: $(PY_QSTR_DEFS) $(QSTR_DEFS) $(QSTR_DEFS_COLLECTED) $(PY_SRC)/makeqstrdata.py mpconfigport.h $(MPCONFIGPORT_MK) $(PY_SRC)/mpconfig.h | $(HEADER_BUILD)
|
2015-05-30 23:14:34 +01:00
|
|
|
$(ECHO) "GEN $@"
|
py: Add rules for automated extraction of qstrs from sources.
- add template rule that converts a specified source file into a qstring file
- add special rule for generating a central header that contains all
extracted/autogenerated strings - defined by QSTR_DEFS_COLLECTED
variable. Each platform appends a list of sources that may contain
qstrings into a new build variable: SRC_QSTR. Any autogenerated
prerequisities are should be appened to SRC_QSTR_AUTO_DEPS variable.
- remove most qstrings from py/qstrdefs, keep only qstrings that
contain special characters - these cannot be easily detected in the
sources without additional annotations
- remove most manual qstrdefs, use qstrdef autogen for: py, cc3200,
stmhal, teensy, unix, windows, pic16bit:
- remove all micropython generic qstrdefs except for the special strings that contain special characters (e.g. /,+,<,> etc.)
- remove all port specific qstrdefs except for special strings
- append sources for qstr generation in platform makefiles (SRC_QSTR)
2016-03-10 09:22:41 +00:00
|
|
|
$(Q)cat $(PY_QSTR_DEFS) $(QSTR_DEFS) $(QSTR_DEFS_COLLECTED) | $(SED) 's/^Q(.*)/"&"/' | $(CPP) $(CFLAGS) - | sed 's/^"\(Q(.*)\)"/\1/' > $(HEADER_BUILD)/qstrdefs.preprocessed.h
|
2015-05-30 23:14:34 +01:00
|
|
|
$(Q)$(PYTHON) $(PY_SRC)/makeqstrdata.py $(HEADER_BUILD)/qstrdefs.preprocessed.h > $@
|
2014-01-21 21:40:13 +00:00
|
|
|
|
2014-01-24 09:05:30 +00:00
|
|
|
# emitters
|
2014-01-21 21:40:13 +00:00
|
|
|
|
2014-01-24 09:05:30 +00:00
|
|
|
$(PY_BUILD)/emitnx64.o: CFLAGS += -DN_X64
|
|
|
|
$(PY_BUILD)/emitnx64.o: py/emitnative.c
|
|
|
|
$(call compile_c)
|
2014-01-07 14:54:15 +00:00
|
|
|
|
2014-09-06 23:06:36 +01:00
|
|
|
$(PY_BUILD)/emitnx86.o: CFLAGS += -DN_X86
|
|
|
|
$(PY_BUILD)/emitnx86.o: py/emitnative.c
|
|
|
|
$(call compile_c)
|
|
|
|
|
2014-01-24 09:05:30 +00:00
|
|
|
$(PY_BUILD)/emitnthumb.o: CFLAGS += -DN_THUMB
|
|
|
|
$(PY_BUILD)/emitnthumb.o: py/emitnative.c
|
|
|
|
$(call compile_c)
|
2014-01-07 14:54:15 +00:00
|
|
|
|
2014-08-16 21:55:53 +01:00
|
|
|
$(PY_BUILD)/emitnarm.o: CFLAGS += -DN_ARM
|
|
|
|
$(PY_BUILD)/emitnarm.o: py/emitnative.c
|
|
|
|
$(call compile_c)
|
|
|
|
|
2014-01-07 15:20:33 +00:00
|
|
|
# optimising gc for speed; 5ms down to 4ms on pybv2
|
2014-04-24 00:59:43 +01:00
|
|
|
$(PY_BUILD)/gc.o: CFLAGS += $(CSUPEROPT)
|
2014-01-07 15:20:33 +00:00
|
|
|
|
2014-01-07 14:54:15 +00: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 00:59:43 +01:00
|
|
|
$(PY_BUILD)/vm.o: CFLAGS += $(CSUPEROPT)
|
2014-12-28 05:44:09 +00: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
|