Browse Source

Add `-tilde` for working on the new compiler

gingerBill 2 years ago
parent
commit
7ab531bd21
3 changed files with 60 additions and 17 deletions
  1. 2 0
      src/build_settings.cpp
  2. 40 17
      src/main.cpp
  3. 18 0
      src/tilde_backend.cpp

+ 2 - 0
src/build_settings.cpp

@@ -318,6 +318,8 @@ struct BuildContext {
 
 
 	isize max_error_count;
 	isize max_error_count;
 
 
+	bool tilde_backend;
+
 
 
 	u32 cmd_doc_flags;
 	u32 cmd_doc_flags;
 	Array<String> extra_packages;
 	Array<String> extra_packages;

+ 40 - 17
src/main.cpp

@@ -71,6 +71,10 @@ gb_global Timings global_timings = {0};
 #include "checker.cpp"
 #include "checker.cpp"
 #include "docs.cpp"
 #include "docs.cpp"
 
 
+#if defined(GB_SYSTEM_WINDOWS)
+#include "tilde_backend.cpp"
+#endif
+
 #include "llvm_backend.cpp"
 #include "llvm_backend.cpp"
 
 
 #if defined(GB_SYSTEM_OSX)
 #if defined(GB_SYSTEM_OSX)
@@ -696,6 +700,8 @@ enum BuildFlagKind {
 	BuildFlag_InternalIgnoreLLVMBuild,
 	BuildFlag_InternalIgnoreLLVMBuild,
 
 
 #if defined(GB_SYSTEM_WINDOWS)
 #if defined(GB_SYSTEM_WINDOWS)
+	BuildFlag_Tilde,
+
 	BuildFlag_IgnoreVsSearch,
 	BuildFlag_IgnoreVsSearch,
 	BuildFlag_ResourceFile,
 	BuildFlag_ResourceFile,
 	BuildFlag_WindowsPdbName,
 	BuildFlag_WindowsPdbName,
@@ -870,6 +876,8 @@ gb_internal bool parse_build_flags(Array<String> args) {
 	add_flag(&build_flags, BuildFlag_InternalIgnoreLLVMBuild, str_lit("internal-ignore-llvm-build"),BuildFlagParam_None,    Command_all);
 	add_flag(&build_flags, BuildFlag_InternalIgnoreLLVMBuild, str_lit("internal-ignore-llvm-build"),BuildFlagParam_None,    Command_all);
 
 
 #if defined(GB_SYSTEM_WINDOWS)
 #if defined(GB_SYSTEM_WINDOWS)
+	add_flag(&build_flags, BuildFlag_Tilde,                   str_lit("tilde"),                     BuildFlagParam_None,    Command__does_build);
+
 	add_flag(&build_flags, BuildFlag_IgnoreVsSearch,          str_lit("ignore-vs-search"),          BuildFlagParam_None,    Command__does_build);
 	add_flag(&build_flags, BuildFlag_IgnoreVsSearch,          str_lit("ignore-vs-search"),          BuildFlagParam_None,    Command__does_build);
 	add_flag(&build_flags, BuildFlag_ResourceFile,            str_lit("resource"),                  BuildFlagParam_String,  Command__does_build);
 	add_flag(&build_flags, BuildFlag_ResourceFile,            str_lit("resource"),                  BuildFlagParam_String,  Command__does_build);
 	add_flag(&build_flags, BuildFlag_WindowsPdbName,          str_lit("pdb-name"),                  BuildFlagParam_String,  Command__does_build);
 	add_flag(&build_flags, BuildFlag_WindowsPdbName,          str_lit("pdb-name"),                  BuildFlagParam_String,  Command__does_build);
@@ -1537,6 +1545,10 @@ gb_internal bool parse_build_flags(Array<String> args) {
 							build_context.ignore_llvm_build = true;
 							build_context.ignore_llvm_build = true;
 							break;
 							break;
 					#if defined(GB_SYSTEM_WINDOWS)
 					#if defined(GB_SYSTEM_WINDOWS)
+						case BuildFlag_Tilde:
+							build_context.tilde_backend = true;
+							break;
+
 						case BuildFlag_IgnoreVsSearch: {
 						case BuildFlag_IgnoreVsSearch: {
 							GB_ASSERT(value.kind == ExactValue_Invalid);
 							GB_ASSERT(value.kind == ExactValue_Invalid);
 							build_context.ignore_microsoft_magic = true;
 							build_context.ignore_microsoft_magic = true;
@@ -2882,27 +2894,38 @@ int main(int arg_count, char const **arg_ptr) {
 		return 0;
 		return 0;
 	}
 	}
 
 
-	MAIN_TIME_SECTION("LLVM API Code Gen");
-	lbGenerator *gen = gb_alloc_item(permanent_allocator(), lbGenerator);
-	if (!lb_init_generator(gen, checker)) {
-		return 1;
-	}
-	if (lb_generate_code(gen)) {
-		switch (build_context.build_mode) {
-		case BuildMode_Executable:
-		case BuildMode_DynamicLibrary:
-			i32 result = linker_stage(gen);
-			if (result) {
-				if (build_context.show_timings) {
-					show_timings(checker, &global_timings);
+#if defined(GB_SYSTEM_WINDOWS)
+	if (build_context.tilde_backend) {
+		MAIN_TIME_SECTION("Tilde Code Gen");
+		if (!tb_generate_code(checker)) {
+			return 1;
+		}
+
+	} else
+#endif
+	{
+		MAIN_TIME_SECTION("LLVM API Code Gen");
+		lbGenerator *gen = gb_alloc_item(permanent_allocator(), lbGenerator);
+		if (!lb_init_generator(gen, checker)) {
+			return 1;
+		}
+		if (lb_generate_code(gen)) {
+			switch (build_context.build_mode) {
+			case BuildMode_Executable:
+			case BuildMode_DynamicLibrary:
+				i32 result = linker_stage(gen);
+				if (result) {
+					if (build_context.show_timings) {
+						show_timings(checker, &global_timings);
+					}
+					return result;
 				}
 				}
-				return result;
+				break;
 			}
 			}
-			break;
 		}
 		}
-	}
 
 
-	remove_temp_files(gen);
+		remove_temp_files(gen);
+	}
 
 
 	if (build_context.show_timings) {
 	if (build_context.show_timings) {
 		show_timings(checker, &global_timings);
 		show_timings(checker, &global_timings);

+ 18 - 0
src/tilde_backend.cpp

@@ -0,0 +1,18 @@
+#if defined(GB_SYSTEM_WINDOWS)
+	#pragma warning(push)
+	#pragma warning(disable: 4200)
+	#pragma warning(disable: 4201)
+	#define restrict gb_restrict
+#endif
+
+#include "tilde/tb.h"
+
+#if defined(GB_SYSTEM_WINDOWS)
+	#pragma warning(pop)
+#endif
+
+
+bool tb_generate_code(Checker *c) {
+	gb_printf_err("TODO(bill): implement Tilde Backend\n");
+	return false;
+}