299 lines
8.0 KiB
C
299 lines
8.0 KiB
C
#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__ */
|