1
- include ../../py/mkenv.mk
1
+ # ###############################################################################
2
+ # Initial setup of Makefile environment.
3
+
4
+ # Select the variant to build for:
5
+ ifdef VARIANT_DIR
6
+ # Custom variant path - remove trailing slash and get the final component of
7
+ # the path as the variant name.
8
+ VARIANT ?= $(notdir $(VARIANT_DIR:/= ) )
9
+ else
10
+ # If not given on the command line, then default to standard.
11
+ VARIANT ?= standard
12
+ VARIANT_DIR ?= variants/$(VARIANT )
13
+ endif
14
+
15
+ ifeq ($(wildcard $(VARIANT_DIR ) /.) ,)
16
+ $(error Invalid VARIANT specified : $(VARIANT_DIR ) )
17
+ endif
18
+
19
+ # If the build directory is not given, make it reflect the variant name.
20
+ BUILD ?= build-$(VARIANT )
2
21
3
- CROSS = 0
22
+ include ../../py/mkenv.mk
23
+ include $(VARIANT_DIR ) /mpconfigvariant.mk
4
24
25
+ # Qstr definitions (must come before including py.mk).
5
26
QSTR_DEFS = qstrdefsport.h
6
27
28
+ # Include py core make definitions.
7
29
include $(TOP ) /py/py.mk
8
30
include $(TOP ) /extmod/extmod.mk
9
31
32
+ # ###############################################################################
33
+ # Project specific settings and compiler/linker flags.
34
+
10
35
CC = emcc
11
36
LD = emcc
37
+ TERSER ?= npx terser
12
38
13
39
INC += -I.
14
40
INC += -I$(TOP )
15
41
INC += -I$(BUILD )
42
+ INC += -I$(VARIANT_DIR )
16
43
17
44
CFLAGS += -std=c99 -Wall -Werror -Wdouble-promotion -Wfloat-conversion
18
45
CFLAGS += -Os -DNDEBUG
19
46
CFLAGS += $(INC )
20
47
48
+ JSFLAGS += -s EXPORTED_FUNCTIONS="\
49
+ _mp_js_init,\
50
+ _mp_js_init_repl,\
51
+ _mp_js_do_str,\
52
+ _mp_js_process_char,\
53
+ _mp_hal_get_interrupt_char,\
54
+ _mp_sched_keyboard_interrupt$(EXPORTED_FUNCTIONS_EXTRA ) "
55
+ JSFLAGS += -s EXPORTED_RUNTIME_METHODS="\
56
+ ccall,\
57
+ cwrap,\
58
+ FS$(EXPORTED_RUNTIME_METHODS_EXTRA ) "
59
+ JSFLAGS += --js-library library.js
60
+ JSFLAGS += -s SUPPORT_LONGJMP=emscripten
61
+
62
+ # ###############################################################################
63
+ # Source files and libraries.
64
+
21
65
SRC_SHARED = $(addprefix shared/,\
22
66
runtime/interrupt_char.c \
23
67
runtime/stdout_helpers.c \
@@ -26,33 +70,41 @@ SRC_SHARED = $(addprefix shared/,\
26
70
timeutils/timeutils.c \
27
71
)
28
72
29
- SRC_C = \
73
+ SRC_C + = \
30
74
main.c \
31
75
mphalport.c \
32
76
77
+ # List of sources for qstr extraction.
33
78
SRC_QSTR += $(SRC_C ) $(SRC_SHARED )
34
79
80
+ SRC_JS ?= wrapper.js
81
+
35
82
OBJ += $(PY_O )
36
83
OBJ += $(addprefix $(BUILD ) /, $(SRC_SHARED:.c=.o ) )
37
84
OBJ += $(addprefix $(BUILD ) /, $(SRC_C:.c=.o ) )
38
85
39
- JSFLAGS += -s ASYNCIFY
40
- JSFLAGS += -s EXPORTED_FUNCTIONS="['_mp_js_init', '_mp_js_init_repl', '_mp_js_do_str', '_mp_js_process_char', '_mp_hal_get_interrupt_char', '_mp_sched_keyboard_interrupt']"
41
- JSFLAGS += -s EXPORTED_RUNTIME_METHODS="['ccall', 'cwrap', 'FS']"
42
- JSFLAGS += --js-library library.js
86
+ # ###############################################################################
87
+ # Main targets.
88
+
89
+ .PHONY : all min test
43
90
44
91
all : $(BUILD ) /micropython.js
45
92
46
- $(BUILD ) /micropython.js : $(OBJ ) library.js wrapper.js
47
- $(ECHO ) " LINK $( BUILD ) /firmware.js "
48
- $(Q ) emcc $(LDFLAGS ) -o $( BUILD ) /firmware.js $(OBJ ) $(JSFLAGS )
49
- cat wrapper.js $( BUILD ) /firmware.js > $@
93
+ $(BUILD ) /micropython.js : $(OBJ ) library.js $( SRC_JS )
94
+ $(ECHO ) " LINK $@ "
95
+ $(Q ) emcc $(LDFLAGS ) -o $@ $(OBJ ) $(JSFLAGS )
96
+ $( Q ) cat $( SRC_JS ) > > $@
50
97
51
- min : $(BUILD ) /micropython.js
52
- uglifyjs $< -c -o $(BUILD ) /micropython.min.js
98
+ $(BUILD ) /micropython.min.js : $(BUILD ) /micropython.js
99
+ $(TERSER ) $< --compress --module -o $@
100
+
101
+ min : $(BUILD ) /micropython.min.js
53
102
54
103
test : $(BUILD ) /micropython.js $(TOP ) /tests/run-tests.py
55
104
$(eval DIRNAME=ports/$(notdir $(CURDIR ) ) )
56
105
cd $(TOP ) /tests && MICROPY_MICROPYTHON=../ports/webassembly/node_run.sh ./run-tests.py -j1
57
106
107
+ # ###############################################################################
108
+ # Remaining make rules.
109
+
58
110
include $(TOP ) /py/mkrules.mk
0 commit comments