aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2020-02-01 22:50:57 +0000
committergingerBill <bill@gingerbill.org>2020-02-01 22:50:57 +0000
commit6ed6a91a6434a944010d8f2c6752e70a372b5296 (patch)
tree717b41d6f7b5d82f6ee989eed77abc8eb4bf4163 /src/main.cpp
parent0f399a72941c7cebcb5ad0580a9d94d1a7a37ac0 (diff)
Begin LLVM C API integration
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 317e8f577..95bc52d63 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -17,11 +17,15 @@ gb_global Timings global_timings = {0};
#include "parser.cpp"
#include "docs.cpp"
#include "checker.cpp"
+
+#include "llvm_backend.cpp"
+
#include "ir.cpp"
#include "ir_opt.cpp"
#include "ir_print.cpp"
#include "query_data.cpp"
+
#if defined(GB_SYSTEM_WINDOWS)
// NOTE(IC): In order to find Visual C++ paths without relying on environment variables.
#include "microsoft_craziness.h"
@@ -234,6 +238,7 @@ enum BuildFlagKind {
BuildFlag_NoCRT,
BuildFlag_UseLLD,
BuildFlag_Vet,
+ BuildFlag_UseLLVMApi,
BuildFlag_IgnoreUnknownAttributes,
BuildFlag_Compact,
@@ -324,6 +329,7 @@ bool parse_build_flags(Array<String> args) {
add_flag(&build_flags, BuildFlag_NoCRT, str_lit("no-crt"), BuildFlagParam_None);
add_flag(&build_flags, BuildFlag_UseLLD, str_lit("lld"), BuildFlagParam_None);
add_flag(&build_flags, BuildFlag_Vet, str_lit("vet"), BuildFlagParam_None);
+ add_flag(&build_flags, BuildFlag_UseLLVMApi, str_lit("llvm-api"), BuildFlagParam_None);
add_flag(&build_flags, BuildFlag_IgnoreUnknownAttributes, str_lit("ignore-unknown-attributes"), BuildFlagParam_None);
add_flag(&build_flags, BuildFlag_Compact, str_lit("compact"), BuildFlagParam_None);
@@ -347,6 +353,7 @@ bool parse_build_flags(Array<String> args) {
gb_printf_err("Invalid flag: %.*s\n", LIT(flag));
continue;
}
+
String name = substring(flag, 1, flag.len);
isize end = 0;
for (; end < name.len; end++) {
@@ -692,6 +699,10 @@ bool parse_build_flags(Array<String> args) {
build_context.vet = true;
break;
+ case BuildFlag_UseLLVMApi:
+ build_context.use_llvm_api = true;
+ break;
+
case BuildFlag_IgnoreUnknownAttributes:
build_context.ignore_unknown_attributes = true;
break;
@@ -1263,6 +1274,15 @@ int main(int arg_count, char const **arg_ptr) {
return 1;
}
+ if (build_context.use_llvm_api) {
+ lbGenerator gen = {};
+ if (!lb_init_generator(&gen, &checker)) {
+ return 1;
+ }
+ lb_generate_module(&gen);
+ return 0;
+ }
+
irGen ir_gen = {0};
if (!ir_gen_init(&ir_gen, &checker)) {
return 1;