#ifndef __NOB_DATA_H__ #define __NOB_DATA_H__ /* clang-format off */ #define VM_SRCS "stage0/spl_mcode.c", "stage0/spl_syscall.c", "stage0/spl_vm.c", static const char *stage0_headers[] = { "stage0/spl_asp.h", "stage0/spl_mcode.h", "stage0/spl_syscall.h", "stage0/spl_vm.h", "stage0/spl_rt_core.h", "stage0/spl_rt.h", "stage0/spl_vm_embed.h", }; static const char *spl_cli_srcs[] = {"stage0/spl_cli.c", VM_SRCS}; static const char *vm_test_srcs[] = {"stage0/test_spl_vm.c", VM_SRCS}; static const char *splc0_srcs[] = { "stage1/splc0.c", "stage1/spl_diag.c", "stage1/spl_tok.c", "stage1/spl_lexer.c", "stage1/spl_ast.c", "stage1/spl_parser.c", "stage1/spl_dumptree.c", "stage1/spl_type.c", "stage1/spl_fold.c", "stage1/spl_lang_type.c", "stage1/spl_attr.c", "stage1/spl_scope.c", "stage1/spl_sema.c", "stage1/spl_intrin.c", "stage1/spl_ir.c", "stage1/spl_ast2ir.c", "stage1/spl_layout.c", "stage1/spl_ir2vm.c", "stage1/ir_opt.c", "stage1/vm_opt.c", "stage0/spl_mcode.c", }; static const char *splc1_crt_deps[] ={ "stage0/spl_rt.h", "stage0/spl_vm_embed.h", // TODO }; static const char* splc1_deps[] = { "stage2/sys/exit.spl", "stage2/sys/file.spl", "stage2/sys/mem.spl", "stage2/sys/time.spl", "stage2/sys/vm.spl", "stage2/utils/algorithm.spl", "stage2/utils/arena.spl", "stage2/utils/ascii.spl", "stage2/utils/byte_buffer.spl", "stage2/utils/byte_view.spl", "stage2/utils/error.spl", "stage2/utils/fmt.spl", "stage2/utils/hash.spl", "stage2/utils/io.spl", "stage2/utils/json.spl", "stage2/utils/log.spl", "stage2/utils/lsp_frame.spl", "stage2/utils/map.spl", "stage2/utils/memory.spl", "stage2/utils/mp.spl", "stage2/utils/path.spl", "stage2/utils/profile.spl", "stage2/utils/set.spl", "stage2/utils/source.spl", "stage2/utils/str.spl", "stage2/utils/utf8.spl", "stage2/utils/value.spl", "stage2/utils/vec.spl", "stage2/ast.spl", "stage2/ast2ir.spl", "stage2/attr.spl", "stage2/def.spl", "stage2/diag.spl", "stage2/eval.spl", "stage2/intrin.spl", "stage2/ir.spl", "stage2/ir2c.spl", "stage2/ir2vm.spl", "stage2/ir_builder.spl", "stage2/lang_type.spl", "stage2/layout.spl", "stage2/lexer.spl", "stage2/mcode.spl", "stage2/parser.spl", "stage2/scope.spl", "stage2/sema.spl", "stage2/splc1.spl", "stage2/token.spl", "stage2/type_table.spl", }; static const char* splc2_deps[] = { /* stage3 */ "stage3/ast2ir.spl", "stage3/ast_clone.spl", "stage3/ctvm.spl", "stage3/eval.spl", "stage3/intrin.spl", "stage3/lang_type.spl", "stage3/sema.spl", "stage3/splc2.spl", "stage3/splrt.spl", /* stage2 */ "stage2/sys/exit.spl", "stage2/sys/file.spl", "stage2/sys/mem.spl", "stage2/sys/time.spl", "stage2/sys/vm.spl", "stage2/utils/algorithm.spl", "stage2/utils/arena.spl", "stage2/utils/ascii.spl", "stage2/utils/byte_buffer.spl", "stage2/utils/byte_view.spl", "stage2/utils/error.spl", "stage2/utils/fmt.spl", "stage2/utils/hash.spl", "stage2/utils/io.spl", "stage2/utils/json.spl", "stage2/utils/log.spl", "stage2/utils/lsp_frame.spl", "stage2/utils/map.spl", "stage2/utils/memory.spl", "stage2/utils/mp.spl", "stage2/utils/path.spl", "stage2/utils/profile.spl", "stage2/utils/set.spl", "stage2/utils/source.spl", "stage2/utils/str.spl", "stage2/utils/utf8.spl", "stage2/utils/value.spl", "stage2/utils/vec.spl", "stage2/ast.spl", "stage2/ast2ir.spl", "stage2/attr.spl", "stage2/def.spl", "stage2/diag.spl", "stage2/eval.spl", "stage2/intrin.spl", "stage2/ir.spl", "stage2/ir2c.spl", "stage2/ir2vm.spl", "stage2/ir_builder.spl", "stage2/lang_type.spl", "stage2/layout.spl", "stage2/lexer.spl", "stage2/mcode.spl", "stage2/parser.spl", "stage2/scope.spl", "stage2/sema.spl", "stage2/splc1.spl", "stage2/token.spl", "stage2/type_table.spl", }; static const char *splc2_crt_deps[] = { "stage0/spl_rt.h", "stage0/spl_rt_core.h", "stage0/spl_asp.h", "stage0/spl_mcode.h", "stage0/spl_vm.h", "stage0/spl_syscall.h", "stage0/spl_vm_embed.h", }; /* clang-format on */ typedef struct build { const char *name; enum { BUILD_EXE, BUILD_EXE_WITH_OPTIMIZATION, BUILD_SIR, BUILD_NATIVE, } kind; union { struct { const char **srcs; size_t srcs_count; const char **headers; size_t headers_count; } exe; struct { const char *src; const char *compiler; const char **deps; size_t deps_count; } sir; struct { const char *src; const char *compiler; const char **deps; size_t deps_count; const char **crt_deps; size_t crt_deps_count; } native; }; } build_t; typedef struct run { const char *name; const char *interpreter; } run_t; static build_t targets[] = { { "spl_cli", BUILD_EXE_WITH_OPTIMIZATION, .exe = {.srcs = spl_cli_srcs, .srcs_count = NOB_ARRAY_LEN(spl_cli_srcs), .headers = stage0_headers, .headers_count = NOB_ARRAY_LEN(stage0_headers)}, }, { "spl_cli_g", BUILD_EXE, .exe = {.srcs = spl_cli_srcs, .srcs_count = NOB_ARRAY_LEN(spl_cli_srcs), .headers = stage0_headers, .headers_count = NOB_ARRAY_LEN(stage0_headers)}, }, { "vm_test", BUILD_EXE, .exe = {.srcs = vm_test_srcs, .srcs_count = NOB_ARRAY_LEN(vm_test_srcs), .headers = stage0_headers, .headers_count = NOB_ARRAY_LEN(stage0_headers)}, }, { "splc0", BUILD_EXE, .exe = {.srcs = splc0_srcs, .srcs_count = NOB_ARRAY_LEN(splc0_srcs), .headers = stage0_headers, .headers_count = NOB_ARRAY_LEN(stage0_headers)}, }, { "splc1", BUILD_SIR, .sir = {.src = "stage2/splc1.spl", .compiler = "splc0", .deps = splc1_deps, .deps_count = NOB_ARRAY_LEN(splc1_deps)}, }, { "splc1s", BUILD_SIR, .sir = {.src = "stage2/splc1.spl", .compiler = "splc1", .deps = splc1_deps, .deps_count = NOB_ARRAY_LEN(splc1_deps)}, }, { "splc1r", BUILD_SIR, .sir = {.src = "stage2/splc1.spl", .compiler = "splc1s", .deps = splc1_deps, .deps_count = NOB_ARRAY_LEN(splc1_deps)}, }, { "splc1n", BUILD_NATIVE, .native = {.src = "stage2/splc1.spl", .compiler = "splc1", .deps = splc1_deps, .deps_count = NOB_ARRAY_LEN(splc1_deps), .crt_deps = splc1_crt_deps, .crt_deps_count = NOB_ARRAY_LEN(splc1_crt_deps)}, }, { "splc2", BUILD_SIR, .sir = {.src = "stage3/splc2.spl", .compiler = "splc1n", .deps = splc2_deps, .deps_count = NOB_ARRAY_LEN(splc2_deps)}, }, { "splc2n", BUILD_NATIVE, .native = {.src = "stage3/splc2.spl", .compiler = "splc1n", .deps = splc2_deps, .deps_count = NOB_ARRAY_LEN(splc2_deps), .crt_deps = splc2_crt_deps, .crt_deps_count = NOB_ARRAY_LEN(splc2_crt_deps)}, }, }; static run_t runs[] = { {"spl_cli", NULL}, {"vm_test", NULL}, {"splc0", NULL}, {"splc1", "spl_cli"}, {"splc1r", "spl_cli"}, {"splc1s", "spl_cli"}, {"splc1n", NULL}, {"splc2", "spl_cli"}, {"splc2n", NULL}, }; #endif /* __NOB_DATA_H__ */