-
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile.host
More file actions
237 lines (194 loc) · 15.8 KB
/
Copy pathMakefile.host
File metadata and controls
237 lines (194 loc) · 15.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
HOST_CC ?= gcc
CC := $(HOST_CC)
CPPFLAGS ?= -Iinclude
CFLAGS ?= -std=c89 -pedantic -Wall -Wextra -Werror -O0 -g
LDFLAGS ?=
HOST_BUILD := build/host
HOST_PROGRAM := $(HOST_BUILD)/pythonami
HOST_SOURCES := src/main.c src/error.c src/memory.c src/platform_host.c src/time.c src/file_host.c src/file_object.c src/runtime.c src/source.c src/token.c src/tokenizer.c src/ast_arena.c src/parser_expression.c src/parser_statement.c src/symbol.c src/code.c src/opcode.c src/compiler.c src/verify.c src/vm.c src/value.c src/object.c src/string.c src/string_methods.c src/list.c src/range.c src/function.c src/native.c src/frame.c src/global.c src/builtin.c src/builtin_process.c src/builtin_io.c src/builtin_file.c src/builtin_text.c src/tuple.c src/dict.c src/set.c src/attr.c src/exception.c src/import.c src/module.c src/float.c
TEST_COMMON := src/error.c src/memory.c src/platform_host.c src/time.c src/file_host.c src/file_object.c src/runtime.c src/source.c src/token.c src/value.c src/object.c src/string.c src/string_methods.c src/list.c src/range.c src/frame.c src/global.c src/builtin.c src/builtin_process.c src/builtin_io.c src/builtin_file.c src/builtin_text.c src/native.c src/tuple.c src/dict.c src/set.c src/attr.c src/exception.c src/module.c src/code.c src/opcode.c src/float.c
TEST_MEMORY_SOURCES := tests/unit/test_memory.c $(TEST_COMMON)
TEST_TOKENIZER_SOURCES := tests/unit/test_tokenizer.c $(TEST_COMMON) src/tokenizer.c
TEST_PARSER_SOURCES := tests/unit/test_parser.c $(TEST_COMMON) src/tokenizer.c src/ast_arena.c src/parser_expression.c src/parser_statement.c
TEST_STATEMENT_SOURCES := tests/unit/test_statements.c $(TEST_COMMON) src/tokenizer.c src/ast_arena.c src/parser_expression.c src/parser_statement.c
TEST_SYMBOL_SOURCES := tests/unit/test_symbols.c $(TEST_COMMON) src/tokenizer.c src/ast_arena.c src/parser_expression.c src/parser_statement.c src/symbol.c
TEST_CODE_SOURCES := tests/unit/test_code.c src/memory.c src/code.c src/opcode.c
TEST_COMPILER_SOURCES := tests/unit/test_compiler.c $(TEST_COMMON) src/tokenizer.c src/ast_arena.c src/parser_expression.c src/parser_statement.c src/symbol.c src/compiler.c src/verify.c src/vm.c src/function.c src/import.c
TEST_VERIFY_SOURCES := tests/unit/test_verify.c src/error.c src/memory.c src/code.c src/opcode.c src/verify.c
TEST_VM_SOURCES := tests/unit/test_vm.c $(TEST_COMMON) src/verify.c src/vm.c src/function.c src/tokenizer.c src/ast_arena.c src/parser_expression.c src/parser_statement.c src/symbol.c src/compiler.c src/import.c
TEST_OBJECT_SOURCES := tests/unit/test_objects.c $(TEST_COMMON)
TEST_LIST_SOURCES := tests/unit/test_lists.c $(TEST_COMMON)
TEST_FUNCTION_SOURCES := tests/unit/test_functions.c $(TEST_COMMON) src/function.c
TEST_FRAME_SOURCES := tests/unit/test_frames.c $(TEST_COMMON)
TEST_CALL_SOURCES := tests/unit/test_calls.c $(TEST_COMMON) src/verify.c src/vm.c src/function.c src/tokenizer.c src/ast_arena.c src/parser_expression.c src/parser_statement.c src/symbol.c src/compiler.c src/import.c
TEST_BUILTIN_SOURCES := tests/unit/test_builtins.c $(TEST_COMMON)
TEST_BUILTIN_IO_SOURCES := tests/unit/test_builtin_io.c $(TEST_COMMON)
TEST_FILE_IO_SOURCES := tests/unit/test_file_io.c $(TEST_COMMON)
TEST_INPUT_SOURCES := tests/unit/test_input.c $(TEST_COMMON)
TEST_PROCESS_SOURCES := tests/unit/test_process.c $(TEST_COMMON)
TEST_TUPLE_SOURCES := tests/unit/test_tuple.c $(TEST_COMMON)
TEST_DICT_SOURCES := tests/unit/test_dict.c $(TEST_COMMON)
TEST_SET_SOURCES := tests/unit/test_set.c $(TEST_COMMON)
TEST_ATTR_SOURCES := tests/unit/test_attr.c $(TEST_COMMON)
TEST_FLOAT_SOURCES := tests/unit/test_float.c $(TEST_COMMON)
TEST_EXCEPTION_SOURCES := tests/unit/test_exceptions.c $(TEST_COMMON) src/tokenizer.c src/ast_arena.c src/parser_expression.c src/parser_statement.c src/symbol.c src/compiler.c src/verify.c src/vm.c src/function.c src/import.c
TEST_IMPORT_SOURCES := tests/unit/test_import.c $(TEST_COMMON) src/tokenizer.c src/ast_arena.c src/parser_expression.c src/parser_statement.c src/symbol.c src/compiler.c src/verify.c src/vm.c src/function.c src/import.c
TEST_INTERRUPT_SOURCES := tests/unit/test_interrupt.c $(TEST_COMMON) src/tokenizer.c src/ast_arena.c src/parser_expression.c src/parser_statement.c src/symbol.c src/compiler.c src/verify.c src/vm.c src/function.c src/import.c
TEST_STRING_METHODS_SOURCES := tests/unit/test_string_methods.c $(TEST_COMMON)
LANGUAGE_CHECK := tests/integration/host/run_language_check.sh
IMPORT_CHECK := tests/integration/host/run_import_checks.sh
DEBUG_STATS_CHECK := tests/integration/host/run_debug_stats_check.sh
STDIO_REDIRECTION_CHECK := tests/integration/host/run_stdio_redirection_check.sh
CHECK_MODE_CHECK := tests/integration/host/run_check_mode_check.sh
.PHONY: all debug release test language-test import-test debug-stats-test stdio-redirection-test check-mode-test clean
all: debug
debug: $(HOST_PROGRAM)
release: CFLAGS := -std=c89 -pedantic -Wall -Wextra -Werror -O2
release: $(HOST_PROGRAM)
$(HOST_BUILD):
mkdir -p $(HOST_BUILD)
$(HOST_PROGRAM): $(HOST_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(HOST_SOURCES) -o $@
$(HOST_BUILD)/test_memory: $(TEST_MEMORY_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_MEMORY_SOURCES) -o $@
$(HOST_BUILD)/test_tokenizer: $(TEST_TOKENIZER_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_TOKENIZER_SOURCES) -o $@
$(HOST_BUILD)/test_parser: $(TEST_PARSER_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_PARSER_SOURCES) -o $@
$(HOST_BUILD)/test_statements: $(TEST_STATEMENT_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_STATEMENT_SOURCES) -o $@
$(HOST_BUILD)/test_symbols: $(TEST_SYMBOL_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_SYMBOL_SOURCES) -o $@
$(HOST_BUILD)/test_code: $(TEST_CODE_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_CODE_SOURCES) -o $@
$(HOST_BUILD)/test_compiler: $(TEST_COMPILER_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_COMPILER_SOURCES) -o $@
$(HOST_BUILD)/test_verify: $(TEST_VERIFY_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_VERIFY_SOURCES) -o $@
$(HOST_BUILD)/test_vm: $(TEST_VM_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_VM_SOURCES) -o $@
$(HOST_BUILD)/test_objects: $(TEST_OBJECT_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_OBJECT_SOURCES) -o $@
$(HOST_BUILD)/test_lists: $(TEST_LIST_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_LIST_SOURCES) -o $@
$(HOST_BUILD)/test_functions: $(TEST_FUNCTION_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_FUNCTION_SOURCES) -o $@
$(HOST_BUILD)/test_frames: $(TEST_FRAME_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_FRAME_SOURCES) -o $@
$(HOST_BUILD)/test_calls: $(TEST_CALL_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_CALL_SOURCES) -o $@
$(HOST_BUILD)/test_builtins: $(TEST_BUILTIN_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_BUILTIN_SOURCES) -o $@
$(HOST_BUILD)/test_builtin_io: $(TEST_BUILTIN_IO_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_BUILTIN_IO_SOURCES) -o $@
$(HOST_BUILD)/test_file_io: $(TEST_FILE_IO_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_FILE_IO_SOURCES) -o $@
$(HOST_BUILD)/test_input: $(TEST_INPUT_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_INPUT_SOURCES) -o $@
$(HOST_BUILD)/test_process: $(TEST_PROCESS_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_PROCESS_SOURCES) -o $@
$(HOST_BUILD)/test_tuple: $(TEST_TUPLE_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_TUPLE_SOURCES) -o $@
$(HOST_BUILD)/test_dict: $(TEST_DICT_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_DICT_SOURCES) -o $@
$(HOST_BUILD)/test_set: $(TEST_SET_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_SET_SOURCES) -o $@
$(HOST_BUILD)/test_attr: $(TEST_ATTR_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_ATTR_SOURCES) -o $@
$(HOST_BUILD)/test_string_methods: $(TEST_STRING_METHODS_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_STRING_METHODS_SOURCES) -o $@
$(HOST_BUILD)/test_float: $(TEST_FLOAT_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_FLOAT_SOURCES) -o $@
$(HOST_BUILD)/test_exceptions: $(TEST_EXCEPTION_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_EXCEPTION_SOURCES) -o $@
$(HOST_BUILD)/test_import: $(TEST_IMPORT_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_IMPORT_SOURCES) -o $@
$(HOST_BUILD)/test_interrupt: $(TEST_INTERRUPT_SOURCES) | $(HOST_BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_INTERRUPT_SOURCES) -o $@
test: $(HOST_BUILD)/test_memory $(HOST_BUILD)/test_tokenizer $(HOST_BUILD)/test_parser $(HOST_BUILD)/test_statements $(HOST_BUILD)/test_symbols $(HOST_BUILD)/test_code $(HOST_BUILD)/test_compiler $(HOST_BUILD)/test_verify $(HOST_BUILD)/test_vm $(HOST_BUILD)/test_objects $(HOST_BUILD)/test_lists $(HOST_BUILD)/test_functions $(HOST_BUILD)/test_frames $(HOST_BUILD)/test_calls $(HOST_BUILD)/test_builtins $(HOST_BUILD)/test_builtin_io $(HOST_BUILD)/test_file_io $(HOST_BUILD)/test_input $(HOST_BUILD)/test_process $(HOST_BUILD)/test_tuple $(HOST_BUILD)/test_dict $(HOST_BUILD)/test_set $(HOST_BUILD)/test_attr $(HOST_BUILD)/test_string_methods $(HOST_BUILD)/test_float $(HOST_BUILD)/test_exceptions $(HOST_BUILD)/test_import $(HOST_BUILD)/test_interrupt $(HOST_PROGRAM) language-test import-failure-test debug-stats-test stdio-redirection-test check-mode-test
$(HOST_BUILD)/test_memory
$(HOST_BUILD)/test_tokenizer
$(HOST_BUILD)/test_parser
$(HOST_BUILD)/test_statements
$(HOST_BUILD)/test_symbols
$(HOST_BUILD)/test_code
$(HOST_BUILD)/test_compiler
$(HOST_BUILD)/test_verify
$(HOST_BUILD)/test_vm
$(HOST_BUILD)/test_objects
$(HOST_BUILD)/test_lists
$(HOST_BUILD)/test_functions
$(HOST_BUILD)/test_frames
$(HOST_BUILD)/test_calls
$(HOST_BUILD)/test_builtins
$(HOST_BUILD)/test_builtin_io
$(HOST_BUILD)/test_file_io
$(HOST_BUILD)/test_input
$(HOST_BUILD)/test_process
$(HOST_BUILD)/test_tuple
$(HOST_BUILD)/test_dict
$(HOST_BUILD)/test_set
$(HOST_BUILD)/test_attr
$(HOST_BUILD)/test_string_methods
$(HOST_BUILD)/test_float
$(HOST_BUILD)/test_exceptions
$(HOST_BUILD)/test_import
$(HOST_BUILD)/test_interrupt
$(HOST_PROGRAM) -V
$(HOST_PROGRAM) --help
language-test: $(HOST_PROGRAM)
chmod +x $(LANGUAGE_CHECK)
$(LANGUAGE_CHECK) $(HOST_PROGRAM) examples/print_values.py tests/fixtures/print_values.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) examples/test_features.py tests/fixtures/test_features.expected.txt feature-one feature-two
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/test_advanced_suite.py tests/fixtures/language/test_advanced_suite.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/operators/test_arithmetic_advanced.py tests/fixtures/language/operators/test_arithmetic_advanced.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/operators/test_logic_advanced.py tests/fixtures/language/operators/test_logic_advanced.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/operators/test_membership.py tests/fixtures/language/operators/test_membership.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/operators/test_identity.py tests/fixtures/language/operators/test_identity.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/operators/test_conditional.py tests/fixtures/language/operators/test_conditional.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/assignment/test_unpack.py tests/fixtures/language/assignment/test_unpack.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/control_flow/test_control_advanced.py tests/fixtures/language/control_flow/test_control_advanced.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/functions/test_functions_advanced.py tests/fixtures/language/functions/test_functions_advanced.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/lists/test_lists_advanced.py tests/fixtures/language/lists/test_lists_advanced.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/iterators/test_iter_next.py tests/fixtures/language/iterators/test_iter_next.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/comprehensions/test_comprehensions.py tests/fixtures/language/comprehensions/test_comprehensions.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/strings/test_strings_advanced.py tests/fixtures/language/strings/test_strings_advanced.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/strings/test_string_methods.py tests/fixtures/language/strings/test_string_methods.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/strings/test_fstrings.py tests/fixtures/language/strings/test_fstrings.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/test_bugfix_suite.py tests/fixtures/language/test_bugfix_suite.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/test_file_io_suite.py tests/fixtures/language/test_file_io_suite.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/types/test_types.py tests/fixtures/language/types/test_types.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/exceptions/test_exceptions.py tests/fixtures/language/exceptions/test_exceptions.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/exceptions/test_with.py tests/fixtures/language/exceptions/test_with.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/import/test_import_driver.py tests/fixtures/language/import/test_import_driver.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/import/test_argv.py tests/fixtures/language/import/test_argv.expected.txt arg-one arg-two
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/import/test_import_cache.py tests/fixtures/language/import/test_import_cache.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/import/test_import_from_alias.py tests/fixtures/language/import/test_import_from_alias.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/import/test_import_functions.py tests/fixtures/language/import/test_import_functions.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/import/test_import_precedence_argv.py tests/fixtures/language/import/test_import_precedence_argv.expected.txt arg-one arg-two
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/random/test_random.py tests/fixtures/language/random/test_random.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/test_time.py tests/fixtures/language/test_time.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/process/test_system.py tests/fixtures/language/process/test_system.expected.txt
$(LANGUAGE_CHECK) $(HOST_PROGRAM) tests/language/process/test_popen.py tests/fixtures/language/process/test_popen.expected.txt
@printf 'Alice\n' | $(HOST_PROGRAM) tests/language/test_input.py > build/host/test_input_lang.out
@tr -d '\r' < tests/fixtures/language/test_input.expected.txt > build/host/test_input_expected.normalized
@tr -d '\r' < build/host/test_input_lang.out > build/host/test_input_lang.normalized
@diff -u build/host/test_input_expected.normalized build/host/test_input_lang.normalized
@echo "PASS: tests/language/test_input.py"
import-test: $(HOST_PROGRAM) $(HOST_BUILD)/test_import
$(HOST_BUILD)/test_import
"$(MAKE)" -f Makefile.host language-test
sh $(IMPORT_CHECK) $(HOST_PROGRAM) .
import-failure-test: $(HOST_PROGRAM)
sh $(IMPORT_CHECK) $(HOST_PROGRAM) .
debug-stats-test: $(HOST_PROGRAM)
chmod +x $(DEBUG_STATS_CHECK)
$(DEBUG_STATS_CHECK) $(HOST_PROGRAM)
stdio-redirection-test: $(HOST_PROGRAM)
chmod +x $(STDIO_REDIRECTION_CHECK)
$(STDIO_REDIRECTION_CHECK) $(HOST_PROGRAM)
check-mode-test: $(HOST_PROGRAM)
chmod +x $(CHECK_MODE_CHECK)
$(CHECK_MODE_CHECK) $(HOST_PROGRAM)
clean:
rm -rf build python python-debug pythonami pythonami-debug