Browse Source

Minor fixes to platform checking code

gingerBill 4 years ago
parent
commit
e8bf1f2064
3 changed files with 24 additions and 13 deletions
  1. 1 0
      src/build_settings.cpp
  2. 10 0
      src/llvm_backend.cpp
  3. 13 13
      src/main.cpp

+ 1 - 0
src/build_settings.cpp

@@ -127,6 +127,7 @@ char const *odin_command_strings[32] = {
 	"query",
 	"query",
 	"doc",
 	"doc",
 	"version",
 	"version",
+	"test",
 };
 };
 
 
 
 

+ 10 - 0
src/llvm_backend.cpp

@@ -8988,6 +8988,16 @@ lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValue const &tv,
 			);
 			);
 			GB_ASSERT(the_asm != nullptr);
 			GB_ASSERT(the_asm != nullptr);
 			LLVMBuildCall2(p->builder, func_type, the_asm, nullptr, 0, "");
 			LLVMBuildCall2(p->builder, func_type, the_asm, nullptr, 0, "");
+		} else if (build_context.metrics.arch == TargetArch_arm64) {
+			LLVMTypeRef func_type = LLVMFunctionType(LLVMVoidTypeInContext(p->module->ctx), nullptr, 0, false);
+			LLVMValueRef the_asm = LLVMGetInlineAsm(func_type,
+				cast(char *)"yield", 5,
+				cast(char *)"", 0,
+				/*HasSideEffects*/true, /*IsAlignStack*/false,
+				LLVMInlineAsmDialectATT
+			);
+			GB_ASSERT(the_asm != nullptr);
+			LLVMBuildCall2(p->builder, func_type, the_asm, nullptr, 0, "");
 		}
 		}
 		return {};
 		return {};
 
 

+ 13 - 13
src/main.cpp

@@ -273,7 +273,7 @@ i32 linker_stage(lbGenerator *gen) {
 					LIT(output_base),
 					LIT(output_base),
 					LIT(build_context.resource_filepath)
 					LIT(build_context.resource_filepath)
 				);
 				);
-        
+
         if(result == 0) {
         if(result == 0) {
           result = system_exec_command_line_app("msvc-link",
           result = system_exec_command_line_app("msvc-link",
             "\"%.*slink.exe\" %s \"%.*s.res\" -OUT:\"%.*s.%s\" %s "
             "\"%.*slink.exe\" %s \"%.*s.res\" -OUT:\"%.*s.%s\" %s "
@@ -425,7 +425,7 @@ i32 linker_stage(lbGenerator *gen) {
 				output_ext = substring(build_context.out_filepath, pos, build_context.out_filepath.len);
 				output_ext = substring(build_context.out_filepath, pos, build_context.out_filepath.len);
 			}
 			}
 		}
 		}
-    
+
 		result = system_exec_command_line_app("ld-link",
 		result = system_exec_command_line_app("ld-link",
 			"%s %s -o \"%.*s%.*s\" %s "
 			"%s %s -o \"%.*s%.*s\" %s "
 			" %s "
 			" %s "
@@ -467,7 +467,7 @@ i32 linker_stage(lbGenerator *gen) {
 
 
 	#endif
 	#endif
 	}
 	}
-  
+
 	return result;
 	return result;
 }
 }
 #endif
 #endif
@@ -696,7 +696,7 @@ bool parse_build_flags(Array<String> args) {
 	add_flag(&build_flags, BuildFlag_Collection,        str_lit("collection"),          BuildFlagParam_String, Command__does_check);
 	add_flag(&build_flags, BuildFlag_Collection,        str_lit("collection"),          BuildFlagParam_String, Command__does_check);
 	add_flag(&build_flags, BuildFlag_Define,            str_lit("define"),              BuildFlagParam_String, Command__does_check, true);
 	add_flag(&build_flags, BuildFlag_Define,            str_lit("define"),              BuildFlagParam_String, Command__does_check, true);
 	add_flag(&build_flags, BuildFlag_BuildMode,         str_lit("build-mode"),          BuildFlagParam_String, Command__does_build); // Commands_build is not used to allow for a better error message
 	add_flag(&build_flags, BuildFlag_BuildMode,         str_lit("build-mode"),          BuildFlagParam_String, Command__does_build); // Commands_build is not used to allow for a better error message
-	add_flag(&build_flags, BuildFlag_Target,            str_lit("target"),              BuildFlagParam_String, Command__does_build);
+	add_flag(&build_flags, BuildFlag_Target,            str_lit("target"),              BuildFlagParam_String, Command__does_check);
 	add_flag(&build_flags, BuildFlag_Debug,             str_lit("debug"),               BuildFlagParam_None, Command__does_check);
 	add_flag(&build_flags, BuildFlag_Debug,             str_lit("debug"),               BuildFlagParam_None, Command__does_check);
 	add_flag(&build_flags, BuildFlag_DisableAssert,     str_lit("disable-assert"),      BuildFlagParam_None, Command__does_check);
 	add_flag(&build_flags, BuildFlag_DisableAssert,     str_lit("disable-assert"),      BuildFlagParam_None, Command__does_check);
 	add_flag(&build_flags, BuildFlag_NoBoundsCheck,     str_lit("no-bounds-check"),     BuildFlagParam_None, Command__does_check);
 	add_flag(&build_flags, BuildFlag_NoBoundsCheck,     str_lit("no-bounds-check"),     BuildFlagParam_None, Command__does_check);
@@ -2349,11 +2349,11 @@ int main(int arg_count, char const **arg_ptr) {
 						LIT(output_base),
 						LIT(output_base),
 						LIT(build_context.resource_filepath)
 						LIT(build_context.resource_filepath)
 					);
 					);
-          
+
           if(result != 0) {
           if(result != 0) {
             return 1;
             return 1;
           }
           }
-          
+
           result = system_exec_command_line_app("msvc-link",
           result = system_exec_command_line_app("msvc-link",
 						"\"%.*slink.exe\" \"%.*s.obj\" \"%.*s.res\" -OUT:\"%.*s.%s\" %s "
 						"\"%.*slink.exe\" \"%.*s.obj\" \"%.*s.res\" -OUT:\"%.*s.%s\" %s "
 						"/nologo /incremental:no /opt:ref /subsystem:%s "
 						"/nologo /incremental:no /opt:ref /subsystem:%s "
@@ -2368,11 +2368,11 @@ int main(int arg_count, char const **arg_ptr) {
 						LIT(build_context.extra_linker_flags),
 						LIT(build_context.extra_linker_flags),
 						lib_str
 						lib_str
 					);
 					);
-          
+
           if(result != 0) {
           if(result != 0) {
             return 1;
             return 1;
           }
           }
-          
+
 				} else {
 				} else {
           i32 result =  system_exec_command_line_app("msvc-link",
           i32 result =  system_exec_command_line_app("msvc-link",
 						"\"%.*slink.exe\" \"%.*s.obj\" -OUT:\"%.*s.%s\" %s "
 						"\"%.*slink.exe\" \"%.*s.obj\" -OUT:\"%.*s.%s\" %s "
@@ -2388,7 +2388,7 @@ int main(int arg_count, char const **arg_ptr) {
 						LIT(build_context.extra_linker_flags),
 						LIT(build_context.extra_linker_flags),
 						lib_str
 						lib_str
 					);
 					);
-          
+
           if(result != 0) {
           if(result != 0) {
             return 1;
             return 1;
           }
           }
@@ -2409,7 +2409,7 @@ int main(int arg_count, char const **arg_ptr) {
 					LIT(build_context.extra_linker_flags),
 					LIT(build_context.extra_linker_flags),
 					lib_str
 					lib_str
 				);
 				);
-        
+
         if(result != 0) {
         if(result != 0) {
           return 1;
           return 1;
         }
         }
@@ -2547,11 +2547,11 @@ int main(int arg_count, char const **arg_ptr) {
 				LIT(build_context.link_flags),
 				LIT(build_context.link_flags),
 				LIT(build_context.extra_linker_flags),
 				LIT(build_context.extra_linker_flags),
 				link_settings);
 				link_settings);
-      
+
       if(result != 0) {
       if(result != 0) {
         return 1;
         return 1;
       }
       }
-      
+
 		#if defined(GB_SYSTEM_OSX)
 		#if defined(GB_SYSTEM_OSX)
 			if (build_context.ODIN_DEBUG) {
 			if (build_context.ODIN_DEBUG) {
 				// NOTE: macOS links DWARF symbols dynamically. Dsymutil will map the stubs in the exe
 				// NOTE: macOS links DWARF symbols dynamically. Dsymutil will map the stubs in the exe
@@ -2578,6 +2578,6 @@ int main(int arg_count, char const **arg_ptr) {
 		#endif
 		#endif
 		}
 		}
 	}
 	}
-  
+
 	return 0;
 	return 0;
 }
 }