diff --git a/base.mak b/base.mak deleted file mode 100644 index b7d43222..00000000 --- a/base.mak +++ /dev/null @@ -1,4 +0,0 @@ - -CFLAGS := -DVM_USE_TCC $(CFLAGS) - -include makefile diff --git a/core.mak b/core.mak new file mode 100644 index 00000000..48f81519 --- /dev/null +++ b/core.mak @@ -0,0 +1,136 @@ + +OPT ?= -Os -flto + +EXE ?= + +CURRENT_DIR != pwd + +BUILD_DIR ?= $(CURRENT_DIR)/build +OBJ_DIR ?= $(BUILD_DIR)/obj +TMP_DIR ?= $(BUILD_DIR)/tmp +BIN_DIR ?= $(BUILD_DIR)/bin +RES_DIR ?= $(BUILD_DIR)/res + +VENDOR_DIR ?= $(CURRENT_DIR)/vendor +CUIK_DIR ?= $(VENDOR_DIR)/cuik +ISOCLINE_DIR ?= $(VENDOR_DIR)/isocline +TCC_DIR ?= $(VENDOR_DIR)/tcc +TREE_SITTER_DIR ?= $(VENDOR_DIR)/tree-sitter +XXHASH_DIR ?= $(VENDOR_DIR)/xxhash + +UNAME_S != uname -s + +PROG_SRCS = main/minivm.c +PROG_OBJS = $(PROG_SRCS:%.c=$(OBJ_DIR)/%.o) + +# GC_SRCS = vendor/bdwgc/alloc.c vendor/bdwgc/allchblk.c vendor/bdwgc/blacklst.c vendor/bdwgc/dbg_mlc.c vendor/bdwgc/dyn_load.c vendor/bdwgc/finalize.c vendor/bdwgc/headers.c vendor/bdwgc/malloc.c vendor/bdwgc/mallocx.c vendor/bdwgc/mark.c vendor/bdwgc/mach_dep.c vendor/bdwgc/mark_rts.c vendor/bdwgc/misc.c vendor/bdwgc/new_hblk.c vendor/bdwgc/obj_map.c vendor/bdwgc/os_dep.c vendor/bdwgc/ptr_chck.c vendor/bdwgc/reclaim.c +GC_OBJS = $(GC_SRCS:%.c=$(OBJ_DIR)/%.o) + +TREES_SRCS = $(TREE_SITTER_DIR)/lib/src/alloc.c $(TREE_SITTER_DIR)/lib/src/get_changed_ranges.c $(TREE_SITTER_DIR)/lib/src/language.c $(TREE_SITTER_DIR)/lib/src/lexer.c $(TREE_SITTER_DIR)/lib/src/node.c $(TREE_SITTER_DIR)/lib/src/parser.c $(TREE_SITTER_DIR)/lib/src/query.c $(TREE_SITTER_DIR)/lib/src/stack.c $(TREE_SITTER_DIR)/lib/src/subtree.c $(TREE_SITTER_DIR)/lib/src/tree_cursor.c $(TREE_SITTER_DIR)/lib/src/tree.c $(TREE_SITTER_DIR)/lib/src/wasm_store.c + +STD_SRCS = vm/std/io.c vm/std/std.c +ISOCLINE_SRCS = $(ISOCLINE_DIR)/src/isocline.c +XXH_SRCS = $(XXHASH_DIR)/xxhash.c +VM_SRCS = vm/ir/ir.c vm/lib.c vm/ir/type.c vm/ast/build.c vm/ast/ast.c vm/ast/comp.c vm/ast/print.c vm/obj.c vm/backend/tb.c vm/backend/exec.c vm/ir/check.c vm/ir/rblock.c vm/lua/parser/parser.c vm/lua/parser/scan.c vm/lua/ast.c vm/lua/repl.c $(ISOCLINE_SRCS) $(XXH_SRCS) $(TREES_SRCS) + +ALL_SRCS = $(VM_SRCS) $(STD_SRCS) $(EXTRA_SRCS) +ALL_OBJS = $(ALL_SRCS:%.c=$(OBJ_DIR)/%.o) + +TCC_SRCS ?= $(TCC_DIR)/libtcc.c $(TCC_DIR)/lib/libtcc1.c +TCC_OBJS = $(TCC_SRCS:%.c=$(OBJ_DIR)/%.o) + +TB_SRCS_BASE = $(CUIK_DIR)/common/common.c $(CUIK_DIR)/common/perf.c $(CUIK_DIR)/tb/src/libtb.c $(CUIK_DIR)/tb/src/x64/x64_target.c +TB_SRCS_FreeBSD = $(CUIK_DIR)/c11threads/threads_posix.c +TB_SRCS = $(TB_SRCS_BASE) $(TB_SRCS_$(UNAME_S)) +TB_OBJS = $(TB_SRCS:%.c=$(OBJ_DIR)/%.o) + +BASE_OBJS = $(ALL_OBJS) $(GC_OBJS) $(TB_OBJS) $(TCC_OBJS) + +CFLAGS += -I $(TREE_SITTER_DIR)/lib/include -I $(TREE_SITTER_DIR)/lib/src $(FLAGS) +LDFLAGS += $(FLAGS) + +OBJS = $(BASE_OBJS) + +LDFLAGS_S_Darwin = -w -Wl,-pagezero_size,0x4000 +LDFLAGS_S_Linux = -lm -ldl +LDFLAGS_O_Cygwin = +LDFLAGS_S_FreeBSD = -lm -ldl -lpthread + +LDFLAGS := $(LDFLAGS_S_$(UNAME_S)) $(LDFLAGS_O_$(UNAME_S)) $(LDFLAGS) + +CFLAGS_O_Cygwin = -D_WIN32 + +CFLAGS := $(CFLAGS_O_$(UNAME_S)) $(CFLAGS) + +default: all + +all: bins + +# tree sitter + +VM_LUA_GRAMMAR_DIR := $(TMP_DIR)/grammar + +pre: $(VM_LUA_GRAMMAR_DIR) + +$(VM_LUA_GRAMMAR_DIR): vm/lua/parser/grammar.js + mkdir -p $(VM_LUA_GRAMMAR_DIR) + cp vm/lua/parser/grammar.js $(VM_LUA_GRAMMAR_DIR) + cd $(VM_LUA_GRAMMAR_DIR) && cargo run --manifest-path $(TREE_SITTER_DIR)/Cargo.toml -- generate + +vm/lua/parser/parser.c: $(VM_LUA_GRAMMAR_DIR) vm/lua/parser/tree_sitter + cp $(VM_LUA_GRAMMAR_DIR)/src/parser.c $(@) + +vm/lua/parser/tree_sitter: $(VM_LUA_GRAMMAR_DIR) + cp -r $(VM_LUA_GRAMMAR_DIR)/src/tree_sitter $(@) + +# windows + +clang-windows: .dummy + rm -rf build + $(MAKE) -Bj$(J) CC=clang EXE=.exe OPT="$(OPT)" CFLAGS="-Icuik/c11threads $(CFLAGS)" LDFLAGS="$(LDFLAGS)" EXTRA_SRCS="$(CUIK_DIR)/c11threads/threads_msvc.c" + +gcc-windows: .dummy + rm -rf build + $(MAKE) -Bj$(J) CC=gcc EXE=.exe OPT="$(OPT)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) -lSynchronization" + +# binaries + +bins: $(BIN_DIR)/minivm$(EXE) + +minivm$(EXE) $(BIN_DIR)/minivm$(EXE): $(OBJ_DIR)/main/minivm.o $(OBJS) + @mkdir -p $$(dirname $(@)) + $(CC) $(OPT) $(OBJ_DIR)/main/minivm.o $(OBJS) -o $(@) $(LDFLAGS) + +# intermediate files + +$(TB_OBJS): $(@:$(OBJ_DIR)/%.o=%.c) + @mkdir -p $$(dirname $(@)) + $(CC) -Wno-unused-value -c $(OPT) $(@:$(OBJ_DIR)/%.o=%.c) -o $(@) $(CFLAGS) -I $(CUIK_DIR)/tb/include -I $(CUIK_DIR)/common -DCUIK_USE_TB -DLOG_SUPPRESS -DTB_HAS_X64 + +$(TCC_DIR)/config.h: $(TCC_DIR)/configure + cd $(TCC_DIR)/ && ./configure + +$(TCC_DIR)/tccdefs_.h: $(TCC_DIR)/include/tccdefs.h + $(MAKE) -C $(TCC_DIR) tccdefs_.h + +$(TCC_OBJS): $(@:$(OBJ_DIR)/%.o=%.c) $(TCC_DIR) $(TCC_DIR)/config.h + @mkdir -p $$(dirname $(@)) + $(CC) -c $(OPT) $(@:$(OBJ_DIR)/%.o=%.c) -o $(@) $(CFLAGS) + +$(PROG_OBJS) $(ALL_OBJS) $(GC_OBJS): $(@:$(OBJ_DIR)/%.o=%.c) + @mkdir -p $$(dirname $(@)) + $(CC) -c $(OPT) $(@:$(OBJ_DIR)/%.o=%.c) -o $(@) $(CFLAGS) + +# format + +format: .dummy + clang-format -i $(ALL_OBJS:$(OBJ_DIR)/%.o=%.c) + +# cleanup + +clean: .dummy + rm -rf $(BUILD_DIR) + +# dummy + +.dummy: diff --git a/main/test/ast.c b/main/test/ast.c new file mode 100644 index 00000000..29bb867a --- /dev/null +++ b/main/test/ast.c @@ -0,0 +1,281 @@ +#include "../../vm/ast/build.h" +#include "../../vm/ast/comp.h" +#include "../../vm/ast/print.h" +#include "../../vm/be/tb.h" +#include "../../vm/ir.h" +#include "../../vm/std/libs/io.h" +#include "../../vm/std/std.h" + +typedef vm_ast_node_t (*vm_test_func_t)(void); + +static vm_ast_node_t vm_main_test_math_add(void) { + vm_ast_node_t ten = vm_ast_build_literal(i64, 10); + vm_ast_node_t twenty = vm_ast_build_literal(i64, 20); + vm_ast_node_t add = vm_ast_build_add(ten, twenty); + return add; +} + +static vm_ast_node_t vm_main_test_math_sub(void) { + vm_ast_node_t ten = vm_ast_build_literal(i64, 10); + vm_ast_node_t twenty = vm_ast_build_literal(i64, 5); + vm_ast_node_t add = vm_ast_build_sub(ten, twenty); + return add; +} + +static vm_ast_node_t vm_main_test_math_mul(void) { + vm_ast_node_t ten = vm_ast_build_literal(i64, 49); + vm_ast_node_t twenty = vm_ast_build_literal(i64, 84); + vm_ast_node_t add = vm_ast_build_mul(ten, twenty); + return add; +} + +static vm_ast_node_t vm_main_test_math_div(void) { + vm_ast_node_t ten = vm_ast_build_literal(i64, 18); + vm_ast_node_t twenty = vm_ast_build_literal(i64, 3); + vm_ast_node_t add = vm_ast_build_div(ten, twenty); + return add; +} + +static vm_ast_node_t vm_main_test_math_mod(void) { + vm_ast_node_t ten = vm_ast_build_literal(i64, 10); + vm_ast_node_t twenty = vm_ast_build_literal(i64, 20); + vm_ast_node_t add = vm_ast_build_mod(ten, twenty); + return add; +} + +static vm_ast_node_t vm_main_test_math_chain(void) { + return vm_ast_build_add( + vm_ast_build_mul( + vm_ast_build_literal(i64, 1), + vm_ast_build_literal(i64, 2) + ), + vm_ast_build_mul( + vm_ast_build_literal(i64, 3), + vm_ast_build_literal(i64, 4) + ) + ); +} + +static vm_ast_node_t vm_main_test_huge_fib_rec(size_t n) { + if (n < 2) { + return vm_ast_build_literal(i64, n); + } else { + return vm_ast_build_add( + vm_main_test_huge_fib_rec(n - 2), + vm_main_test_huge_fib_rec(n - 1) + ); + } +} + +static vm_ast_node_t vm_main_test_huge_fib(void) { + return vm_main_test_huge_fib_rec(15); +} + +static vm_ast_node_t vm_main_test_math_fac(void) { + vm_ast_node_t value = vm_ast_build_literal(i64, 1); + for (size_t i = 2; i < 10; i++) { + value = vm_ast_build_mul(vm_ast_build_literal(i64, i), value); + } + return value; +} + +static vm_ast_node_t vm_main_test_table_env(void) { + return vm_ast_build_env(); +} + +static vm_ast_node_t vm_main_test_table_load_basic(void) { + return vm_ast_build_load( + vm_ast_build_env(), + vm_ast_build_literal(str, "print") + ); +} + +static vm_ast_node_t vm_main_test_if_const_false(void) { + vm_ast_node_t cond = vm_ast_build_literal(i64, 0); + vm_ast_node_t iftrue = vm_ast_build_literal(str, "zero is true"); + vm_ast_node_t iffalse = vm_ast_build_literal(str, "zero is false"); + return vm_ast_build_if(cond, iftrue, iffalse); +} + +static vm_ast_node_t vm_main_test_if_const_true(void) { + vm_ast_node_t cond = vm_ast_build_literal(i64, 1); + vm_ast_node_t iftrue = vm_ast_build_literal(str, "one is true"); + vm_ast_node_t iffalse = vm_ast_build_literal(str, "one is false"); + return vm_ast_build_if(cond, iftrue, iffalse); +} + +static vm_ast_node_t vm_main_test_count_loop(void) { + vm_ast_node_t n = vm_ast_build_ident("n"); + vm_ast_node_t i = vm_ast_build_ident("i"); + return vm_ast_build_block( + 4, + vm_ast_build_set( + n, + vm_ast_build_literal(i64, 0) + ), + vm_ast_build_set( + i, + vm_ast_build_literal(i64, 0) + ), + vm_ast_build_while( + vm_ast_build_lt(i, vm_ast_build_literal(i64, 1000000)), + vm_ast_build_block( + 2, + vm_ast_build_set( + i, + vm_ast_build_add( + i, + vm_ast_build_literal(i64, 1) + ) + ), + vm_ast_build_set( + n, + vm_ast_build_add( + n, + i + ) + ) + ) + ), + vm_ast_build_return(n) + ); +} + +void vm_test(vm_config_t *config, const char *name, vm_test_func_t gen) { + printf("\ntest: %s\n", name); + clock_t p1 = clock(); + + vm_ast_node_t node = vm_ast_build_return(gen()); + + if (config->dump_ast) { + printf("\n--- ast ---\n"); + vm_ast_print_node(stdout, 0, "", node); + } + + clock_t p2 = clock(); + + vm_ast_blocks_t blocks = vm_ast_comp(node); + + clock_t p3 = clock(); + + if (config->dump_ir) { + vm_print_blocks(stdout, blocks.len, blocks.blocks); + } + + vm_std_value_t value = vm_tb_run(config, blocks.len, blocks.blocks, vm_std_new()); + + clock_t p4 = clock(); + + vm_io_debug(stdout, 0, "result: ", value, NULL); + if (config->dump_time) { + double diff1 = (double)(p2 - p1) / CLOCKS_PER_SEC * 1000; + double diff2 = (double)(p3 - p2) / CLOCKS_PER_SEC * 1000; + double diff3 = (double)(p4 - p3) / CLOCKS_PER_SEC * 1000; + printf("took: %.3fms / %.3fms / %.3fms\n", diff1, diff2, diff3); + } +} + +#define vm_test(...) vm_test(config, __VA_ARGS__) + +int main(int argc, char **argv) { + vm_init_mem(); + vm_config_t val_config = (vm_config_t) { + .use_tb_opt = true, + .dump_src = false, + .dump_ast = false, + .dump_ir = false, + .dump_ver = false, + .dump_tb = false, + .dump_tb_opt = false, + .dump_x86 = false, + .dump_args = false, + .dump_time = true, + }; + vm_config_t *config = &val_config; + for (size_t i = 1; i < argc; i++) { + char *arg = argv[i]; + if (!strcmp(arg, "--")) { + break; + } + if (!strncmp(arg, "--dump-", 7)) { + arg += 7; + if (!strcmp(arg, "src")) { + config->dump_src = true; + } + if (!strcmp(arg, "ast")) { + config->dump_ast = true; + } + if (!strcmp(arg, "ir")) { + config->dump_ir = true; + } + if (!strcmp(arg, "ver")) { + config->dump_ver = true; + } + if (!strcmp(arg, "tb")) { + config->dump_tb = true; + } + if (!strcmp(arg, "opt")) { + config->dump_tb_opt = true; + } + if (!strcmp(arg, "x86")) { + config->dump_x86 = true; + } + if (!strcmp(arg, "args")) { + config->dump_args = true; + } + } + } + vm_test( + "math.add", + vm_main_test_math_add + ); + vm_test( + "math.sub", + vm_main_test_math_sub + ); + vm_test( + "math.mul", + vm_main_test_math_mul + ); + vm_test( + "math.div", + vm_main_test_math_div + ); + vm_test( + "math.mod", + vm_main_test_math_mod + ); + vm_test( + "math.chain", + vm_main_test_math_chain + ); + vm_test( + "math.fac", + vm_main_test_math_fac + ); + vm_test( + "huge.fib", + vm_main_test_huge_fib + ); + // vm_test( + // "table.env", + // vm_main_test_table_env + // ); + vm_test( + "table.load.basic", + vm_main_test_table_load_basic + ); + vm_test( + "if.const.false", + vm_main_test_if_const_false + ); + vm_test( + "if.const.true", + vm_main_test_if_const_true + ); + vm_test( + "huge.while", + vm_main_test_count_loop + ); + return 0; +} diff --git a/makefile b/makefile index 80a56975..0a8f414d 100644 --- a/makefile +++ b/makefile @@ -1,127 +1,4 @@ - -OPT ?= -Os -flto - -EXE ?= - -CURRENT_DIR != pwd - -BUILD_DIR ?= $(CURRENT_DIR)/build -OBJ_DIR ?= $(BUILD_DIR)/obj -TMP_DIR ?= $(BUILD_DIR)/tmp -BIN_DIR ?= $(BUILD_DIR)/bin -RES_DIR ?= $(BUILD_DIR)/res - -VENDOR_DIR ?= $(CURRENT_DIR)/vendor -VENDOR_CUIK_DIR ?= $(VENDOR_DIR)/cuik -VENDOR_ISOCLINE_DIR ?= $(VENDOR_DIR)/isocline -VENDOR_TCC_DIR ?= $(VENDOR_DIR)/tcc -VENDOR_TREE_SITTER_DIR ?= $(VENDOR_DIR)/tree-sitter -VENDOR_XXHASH_DIR ?= $(VENDOR_DIR)/xxhash - -UNAME_S != uname -s -UNAME_O != uname -o - -PROG_SRCS = main/minivm.c -PROG_OBJS = $(PROG_SRCS:%.c=$(OBJ_DIR)/%.o) - -# GC_SRCS = vendor/bdwgc/alloc.c vendor/bdwgc/allchblk.c vendor/bdwgc/blacklst.c vendor/bdwgc/dbg_mlc.c vendor/bdwgc/dyn_load.c vendor/bdwgc/finalize.c vendor/bdwgc/headers.c vendor/bdwgc/malloc.c vendor/bdwgc/mallocx.c vendor/bdwgc/mark.c vendor/bdwgc/mach_dep.c vendor/bdwgc/mark_rts.c vendor/bdwgc/misc.c vendor/bdwgc/new_hblk.c vendor/bdwgc/obj_map.c vendor/bdwgc/os_dep.c vendor/bdwgc/ptr_chck.c vendor/bdwgc/reclaim.c -GC_OBJS = $(GC_SRCS:%.c=$(OBJ_DIR)/%.o) - -TREES_SRCS = vendor/tree-sitter/lib/src/alloc.c vendor/tree-sitter/lib/src/get_changed_ranges.c vendor/tree-sitter/lib/src/language.c vendor/tree-sitter/lib/src/lexer.c vendor/tree-sitter/lib/src/node.c vendor/tree-sitter/lib/src/parser.c vendor/tree-sitter/lib/src/query.c vendor/tree-sitter/lib/src/stack.c vendor/tree-sitter/lib/src/subtree.c vendor/tree-sitter/lib/src/tree_cursor.c vendor/tree-sitter/lib/src/tree.c vendor/tree-sitter/lib/src/wasm_store.c - -STD_SRCS = vm/std/io.c vm/std/std.c -ISOCLINE_SRCS = vendor/isocline/src/isocline.c -XXH_SRCS = vendor/xxhash/xxhash.c -VM_SRCS = vm/ir/ir.c vm/lib.c vm/ir/type.c vm/ast/build.c vm/ast/ast.c vm/ast/comp.c vm/ast/print.c vm/obj.c vm/backend/tb.c vm/backend/exec.c vm/ir/check.c vm/ir/rblock.c vm/lua/parser/parser.c vm/lua/parser/scan.c vm/lua/ast.c vm/lua/repl.c $(ISOCLINE_SRCS) $(XXH_SRCS) $(TREES_SRCS) - -ALL_SRCS = $(VM_SRCS) $(STD_SRCS) $(EXTRA_SRCS) -ALL_OBJS = $(ALL_SRCS:%.c=$(OBJ_DIR)/%.o) - -TCC_SRCS ?= vendor/tcc/libtcc.c vendor/tcc/lib/libtcc1.c -TCC_OBJS = $(TCC_SRCS:%.c=$(OBJ_DIR)/%.o) - -TB_SRCS_BASE = vendor/cuik/common/common.c vendor/cuik/common/perf.c vendor/cuik/tb/src/libtb.c vendor/cuik/tb/src/x64/x64_target.c -TB_SRCS_FreeBSD = vendor/cuik/c11threads/threads_posix.c -TB_SRCS = $(TB_SRCS_BASE) $(TB_SRCS_$(UNAME_S)) -TB_OBJS = $(TB_SRCS:%.c=$(OBJ_DIR)/%.o) - -BASE_OBJS = $(ALL_OBJS) $(GC_OBJS) $(TB_OBJS) $(TCC_OBJS) - -CFLAGS += -I vendor/tree-sitter/lib/include -I vendor/tree-sitter/lib/src $(FLAGS) -LDFLAGS += $(FLAGS) - -OBJS = $(BASE_OBJS) - -LDFLAGS_S_Darwin = -w -Wl,-pagezero_size,0x4000 -LDFLAGS_S_Linux = -lm -ldl -LDFLAGS_O_Cygwin = -LDFLAGS_S_FreeBSD = -lm -ldl -lpthread - -LDFLAGS := $(LDFLAGS_S_$(UNAME_S)) $(LDFLAGS_O_$(UNAME_O)) $(LDFLAGS) - -CFLAGS_O_Cygwin = -D_WIN32 - -CFLAGS := $(CFLAGS_O_$(UNAME_O)) $(CFLAGS) - -default: all - -all: bins - -# tree sitter - -VM_LUA_GRAMMAR_DIR := $(TMP_DIR)/grammar - -pre: $(VM_LUA_GRAMMAR_DIR) - -$(VM_LUA_GRAMMAR_DIR): vm/lua/parser/grammar.js - mkdir -p $(VM_LUA_GRAMMAR_DIR) - cp vm/lua/parser/grammar.js $(VM_LUA_GRAMMAR_DIR) - cd $(VM_LUA_GRAMMAR_DIR) && cargo run --manifest-path $(VENDOR_TREE_SITTER_DIR)/Cargo.toml -- generate - -vm/lua/parser/parser.c: $(VM_LUA_GRAMMAR_DIR) vm/lua/parser/tree_sitter - cp $(VM_LUA_GRAMMAR_DIR)/src/parser.c $(@) - -vm/lua/parser/tree_sitter: $(VM_LUA_GRAMMAR_DIR) - cp -r $(VM_LUA_GRAMMAR_DIR)/src/tree_sitter $(@) - -# windows - -clang-windows: .dummy - rm -rf build - $(MAKE) -Bj$(J) CC=clang EXE=.exe OPT="$(OPT)" CFLAGS="-Icuik/c11threads $(CFLAGS)" LDFLAGS="$(LDFLAGS)" EXTRA_SRCS="vendor/cuik/c11threads/threads_msvc.c" - -gcc-windows: .dummy - rm -rf build - $(MAKE) -Bj$(J) CC=gcc EXE=.exe OPT="$(OPT)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) -lSynchronization" - -# binaries - -bins: $(BIN_DIR)/minivm$(EXE) - -minivm$(EXE) $(BIN_DIR)/minivm$(EXE): $(OBJ_DIR)/main/minivm.o $(OBJS) - @mkdir -p $$(dirname $(@)) - $(CC) $(OPT) $(OBJ_DIR)/main/minivm.o $(OBJS) -o $(@) $(LDFLAGS) - -# intermediate files - -$(TB_OBJS): $(@:$(OBJ_DIR)/%.o=%.c) - @mkdir -p $$(dirname $(@)) - $(CC) -Wno-unused-value -c $(OPT) $(@:$(OBJ_DIR)/%.o=%.c) -o $(@) $(CFLAGS) -I vendor/cuik/tb/include -I vendor/cuik/common -DCUIK_USE_TB -DLOG_SUPPRESS -DTB_HAS_X64 - -$(PROG_OBJS) $(ALL_OBJS) $(GC_OBJS) $(TCC_OBJS): $(@:$(OBJ_DIR)/%.o=%.c) - @mkdir -p $$(dirname $(@)) - $(CC) -c $(OPT) $(@:$(OBJ_DIR)/%.o=%.c) -o $(@) $(CFLAGS) - -# format - -format: .dummy - clang-format -i $(ALL_OBJS:$(OBJ_DIR)/%.o=%.c) - -# cleanup - -clean: .dummy - rm -rf $(BUILD_DIR) - -# dummy - -.dummy: + +CFLAGS := -DVM_USE_TCC $(CFLAGS) + +include core.mak diff --git a/tcc.mak b/tcc.mak index b8d6707b..ff01d60e 100644 --- a/tcc.mak +++ b/tcc.mak @@ -4,4 +4,4 @@ CFLAGS := -DCONFIG_TCC_PREDEFS -DVM_USE_TCC $(CFLAGS) IGNORE != cd vendor/tcc && ./configure IGNORE != echo '""' > vendor/tcc/tccdefs_.h -include makefile +include core.mak diff --git a/vm/lua/repl.c b/vm/lua/repl.c index 237dad7f..2744fa5a 100644 --- a/vm/lua/repl.c +++ b/vm/lua/repl.c @@ -7,7 +7,6 @@ #include "../backend/tb.h" #include "../ir/ir.h" #include "../std/io.h" -#include const TSLanguage *tree_sitter_lua(void); vm_ast_node_t vm_lang_lua_parse(vm_config_t *config, const char *str); diff --git a/web.mak b/web.mak index dab817f5..8a623761 100644 --- a/web.mak +++ b/web.mak @@ -7,5 +7,5 @@ ISOCLINE_SRCS = CFLAGS := -fPIC $(CFLAGS) LDFLAGS := -s BINARYEN_ASYNC_COMPILATION=0 -s ERROR_ON_UNDEFINED_SYMBOLS=0 -s ALLOW_MEMORY_GROWTH=1 -s EXPORT_ES6=1 -s ENVIRONMENT=worker -s MAIN_MODULE=2 -s EXPORTED_RUNTIME_METHODS="['FS','callMain']" $(LDFLAGS) -include makefile +include core.mak