Browse Source

Fix building issues with arm32

gingerBill 3 years ago
parent
commit
0e27b27b81
2 changed files with 28 additions and 17 deletions
  1. 27 17
      src/build_settings.cpp
  2. 1 0
      src/checker.cpp

+ 27 - 17
src/build_settings.cpp

@@ -378,7 +378,7 @@ gb_global TargetMetrics target_linux_arm32 = {
 	TargetArch_arm32,
 	4,
 	8,
-	str_lit("aapcs-linux-gnu"),
+	str_lit("arm-linux-gnu"),
 	str_lit("e-m:o-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"),
 };
 
@@ -1127,6 +1127,15 @@ void init_build_context(TargetMetrics *cross_target) {
 			bc->link_flags = str_lit("-arch x86 ");
 			break;
 		}
+	} else if (bc->metrics.arch == TargetArch_arm32) {
+		switch (bc->metrics.os) {
+		case TargetOs_linux:
+			bc->link_flags = str_lit("-arch arm ");
+			break;
+		default:
+			gb_printf_err("Compiler Error: Unsupported architecture\n");
+			gb_exit(1);
+		}
 	} else if (bc->metrics.arch == TargetArch_arm64) {
 		switch (bc->metrics.os) {
 		case TargetOs_darwin:
@@ -1214,27 +1223,28 @@ bool init_build_paths(String init_filename) {
 				return false;
 			}
 
-			GB_ASSERT(find_result.windows_sdk_um_library_path.len > 0);
-			GB_ASSERT(find_result.windows_sdk_ucrt_library_path.len > 0);
+			if (find_result.windows_sdk_um_library_path.len > 0) {
+				GB_ASSERT(find_result.windows_sdk_ucrt_library_path.len > 0);
 
-			if (find_result.windows_sdk_root.len > 0) {
-				bc->build_paths[BuildPath_Win_SDK_Root]     = path_from_string(ha, find_result.windows_sdk_root);
-			}
+				if (find_result.windows_sdk_root.len > 0) {
+					bc->build_paths[BuildPath_Win_SDK_Root]     = path_from_string(ha, find_result.windows_sdk_root);
+				}
 
-			if (find_result.windows_sdk_um_library_path.len > 0) {
-				bc->build_paths[BuildPath_Win_SDK_UM_Lib]   = path_from_string(ha, find_result.windows_sdk_um_library_path);
-			}
+				if (find_result.windows_sdk_um_library_path.len > 0) {
+					bc->build_paths[BuildPath_Win_SDK_UM_Lib]   = path_from_string(ha, find_result.windows_sdk_um_library_path);
+				}
 
-			if (find_result.windows_sdk_ucrt_library_path.len > 0) {
-				bc->build_paths[BuildPath_Win_SDK_UCRT_Lib] = path_from_string(ha, find_result.windows_sdk_ucrt_library_path);
-			}
+				if (find_result.windows_sdk_ucrt_library_path.len > 0) {
+					bc->build_paths[BuildPath_Win_SDK_UCRT_Lib] = path_from_string(ha, find_result.windows_sdk_ucrt_library_path);
+				}
 
-			if (find_result.vs_exe_path.len > 0) {
-				bc->build_paths[BuildPath_VS_EXE]           = path_from_string(ha, find_result.vs_exe_path);
-			}
+				if (find_result.vs_exe_path.len > 0) {
+					bc->build_paths[BuildPath_VS_EXE]           = path_from_string(ha, find_result.vs_exe_path);
+				}
 
-			if (find_result.vs_library_path.len > 0) {
-				bc->build_paths[BuildPath_VS_LIB]           = path_from_string(ha, find_result.vs_library_path);
+				if (find_result.vs_library_path.len > 0) {
+					bc->build_paths[BuildPath_VS_LIB]           = path_from_string(ha, find_result.vs_library_path);
+				}
 			}
 
 			gb_free(ha, find_result.windows_sdk_root.text);

+ 1 - 0
src/checker.cpp

@@ -944,6 +944,7 @@ void init_universal(void) {
 			{"Unknown", TargetArch_Invalid},
 			{"amd64",   TargetArch_amd64},
 			{"i386",    TargetArch_i386},
+			{"arm32",   TargetArch_arm32},
 			{"arm64",   TargetArch_arm64},
 			{"wasm32",  TargetArch_wasm32},
 			{"wasm64",  TargetArch_wasm64},