mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-07 16:18:52 +00:00
fix: cross-compilation for android on linux
add `-nodefaultlibs` when cross-linking for android to prevent clang from linking with libgcc check build mode first before calling `init_android_values` to prevent printing a message that tells the user to set `-android-keystore` if its not set and build mode is exe
This commit is contained in:
+24
-24
@@ -1781,6 +1781,30 @@ gb_internal void init_build_context(TargetMetrics *cross_target, Subtarget subta
|
|||||||
bc->ODIN_WINDOWS_SUBSYSTEM = windows_subsystem_names[Windows_Subsystem_CONSOLE];
|
bc->ODIN_WINDOWS_SUBSYSTEM = windows_subsystem_names[Windows_Subsystem_CONSOLE];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (subtarget == Subtarget_Android) {
|
||||||
|
switch (build_context.build_mode) {
|
||||||
|
case BuildMode_DynamicLibrary:
|
||||||
|
case BuildMode_Object:
|
||||||
|
case BuildMode_Assembly:
|
||||||
|
case BuildMode_LLVM_IR:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
case BuildMode_Executable:
|
||||||
|
case BuildMode_StaticLibrary:
|
||||||
|
if ((build_context.command_kind & Command__does_build) != 0) {
|
||||||
|
gb_printf_err("Unsupported -build-mode for -subtarget:android\n");
|
||||||
|
gb_printf_err("\tCurrently only supporting: \n");
|
||||||
|
// gb_printf_err("\t\texe\n");
|
||||||
|
gb_printf_err("\t\tshared\n");
|
||||||
|
gb_printf_err("\t\tobject\n");
|
||||||
|
gb_printf_err("\t\tassembly\n");
|
||||||
|
gb_printf_err("\t\tllvm-ir\n");
|
||||||
|
gb_exit(1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (metrics->os == TargetOs_darwin && subtarget == Subtarget_iOS) {
|
if (metrics->os == TargetOs_darwin && subtarget == Subtarget_iOS) {
|
||||||
switch (metrics->arch) {
|
switch (metrics->arch) {
|
||||||
case TargetArch_arm64:
|
case TargetArch_arm64:
|
||||||
@@ -1900,30 +1924,6 @@ gb_internal void init_build_context(TargetMetrics *cross_target, Subtarget subta
|
|||||||
if (bc->metrics.os == TargetOs_freestanding) {
|
if (bc->metrics.os == TargetOs_freestanding) {
|
||||||
bc->ODIN_DEFAULT_TO_NIL_ALLOCATOR = !bc->ODIN_DEFAULT_TO_PANIC_ALLOCATOR;
|
bc->ODIN_DEFAULT_TO_NIL_ALLOCATOR = !bc->ODIN_DEFAULT_TO_PANIC_ALLOCATOR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (subtarget == Subtarget_Android) {
|
|
||||||
switch (build_context.build_mode) {
|
|
||||||
case BuildMode_DynamicLibrary:
|
|
||||||
case BuildMode_Object:
|
|
||||||
case BuildMode_Assembly:
|
|
||||||
case BuildMode_LLVM_IR:
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
case BuildMode_Executable:
|
|
||||||
case BuildMode_StaticLibrary:
|
|
||||||
if ((build_context.command_kind & Command__does_build) != 0) {
|
|
||||||
gb_printf_err("Unsupported -build-mode for -subtarget:android\n");
|
|
||||||
gb_printf_err("\tCurrently only supporting: \n");
|
|
||||||
// gb_printf_err("\t\texe\n");
|
|
||||||
gb_printf_err("\t\tshared\n");
|
|
||||||
gb_printf_err("\t\tobject\n");
|
|
||||||
gb_printf_err("\t\tassembly\n");
|
|
||||||
gb_printf_err("\t\tllvm-ir\n");
|
|
||||||
gb_exit(1);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(GB_SYSTEM_WINDOWS)
|
#if defined(GB_SYSTEM_WINDOWS)
|
||||||
|
|||||||
+2
-1
@@ -143,7 +143,7 @@ gb_internal i32 linker_stage(LinkerData *gen) {
|
|||||||
LIT(target_arch_names[build_context.metrics.arch])
|
LIT(target_arch_names[build_context.metrics.arch])
|
||||||
);
|
);
|
||||||
#endif
|
#endif
|
||||||
} else if (build_context.cross_compiling && build_context.different_os) {
|
} else if (build_context.cross_compiling) {
|
||||||
switch (selected_subtarget) {
|
switch (selected_subtarget) {
|
||||||
case Subtarget_Android:
|
case Subtarget_Android:
|
||||||
is_cross_linking = true;
|
is_cross_linking = true;
|
||||||
@@ -840,6 +840,7 @@ try_cross_linking:;
|
|||||||
|
|
||||||
if (is_android) {
|
if (is_android) {
|
||||||
link_command_line = gb_string_append_fmt(link_command_line, " --target=aarch64-linux-android%d ", ODIN_ANDROID_API_LEVEL);
|
link_command_line = gb_string_append_fmt(link_command_line, " --target=aarch64-linux-android%d ", ODIN_ANDROID_API_LEVEL);
|
||||||
|
link_command_line = gb_string_appendc(link_command_line, " -nodefaultlibs");
|
||||||
}
|
}
|
||||||
link_command_line = gb_string_appendc(link_command_line, " -Wno-unused-command-line-argument ");
|
link_command_line = gb_string_appendc(link_command_line, " -Wno-unused-command-line-argument ");
|
||||||
link_command_line = gb_string_appendc(link_command_line, object_files);
|
link_command_line = gb_string_appendc(link_command_line, object_files);
|
||||||
|
|||||||
Reference in New Issue
Block a user