From 44950d5f37f1a288182179b9b106f3510f51704e Mon Sep 17 00:00:00 2001 From: IllusionMan1212 Date: Sat, 5 Apr 2025 02:18:06 +0200 Subject: 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 --- src/linker.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/linker.cpp') diff --git a/src/linker.cpp b/src/linker.cpp index 5c0fe446f..8f484f734 100644 --- a/src/linker.cpp +++ b/src/linker.cpp @@ -143,7 +143,7 @@ gb_internal i32 linker_stage(LinkerData *gen) { LIT(target_arch_names[build_context.metrics.arch]) ); #endif - } else if (build_context.cross_compiling && build_context.different_os) { + } else if (build_context.cross_compiling) { switch (selected_subtarget) { case Subtarget_Android: is_cross_linking = true; @@ -840,6 +840,7 @@ try_cross_linking:; 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_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, object_files); -- cgit v1.2.3 From 2328e8407750c87d9393247fd0faf3d68cc35813 Mon Sep 17 00:00:00 2001 From: IllusionMan1212 Date: Sat, 5 Apr 2025 03:15:03 +0200 Subject: fix cross compilation for linux_riscv --- src/linker.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/linker.cpp') diff --git a/src/linker.cpp b/src/linker.cpp index 8f484f734..b4f118b6b 100644 --- a/src/linker.cpp +++ b/src/linker.cpp @@ -143,7 +143,7 @@ gb_internal i32 linker_stage(LinkerData *gen) { LIT(target_arch_names[build_context.metrics.arch]) ); #endif - } else if (build_context.cross_compiling) { + } else if (build_context.cross_compiling && (build_context.different_os || selected_subtarget != Subtarget_Default)) { switch (selected_subtarget) { case Subtarget_Android: is_cross_linking = true; -- cgit v1.2.3 From 106427b127c8abbf1f9fcb7fffb0fe47908c1fb9 Mon Sep 17 00:00:00 2001 From: Hisham Aburaqibah Date: Sat, 5 Apr 2025 11:22:05 +0200 Subject: fix(android): pass `--sysroot` when compiling the android glue code This prevents a `function-like macro '__GLIBC_USE' is not defined` compilation error from happening with newer NDK versions (I tried r28) --- src/linker.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/linker.cpp') diff --git a/src/linker.cpp b/src/linker.cpp index b4f118b6b..3ed924ac3 100644 --- a/src/linker.cpp +++ b/src/linker.cpp @@ -655,6 +655,11 @@ try_cross_linking:; glue = gb_string_append_length(glue, android_glue_object.text, android_glue_object.len); glue = gb_string_appendc(glue, "\" "); + glue = gb_string_appendc(glue, "--sysroot \""); + glue = gb_string_append_length(glue, ODIN_ANDROID_NDK_TOOLCHAIN.text, ODIN_ANDROID_NDK_TOOLCHAIN.len); + glue = gb_string_appendc(glue, "sysroot"); + glue = gb_string_appendc(glue, "\" "); + glue = gb_string_appendc(glue, "\"-I"); glue = gb_string_append_length(glue, ODIN_ANDROID_NDK_TOOLCHAIN.text, ODIN_ANDROID_NDK_TOOLCHAIN.len); glue = gb_string_appendc(glue, "sysroot/usr/include/"); -- cgit v1.2.3