From 7d2a8dc8eeda63d639f53f9c6d3089d849b9d33c Mon Sep 17 00:00:00 2001 From: IllusionMan1212 Date: Mon, 7 Apr 2025 13:02:14 +0200 Subject: [PATCH 1/2] fix: use the clang binary that's provided by the android NDK always link against libandroid because it's needed by the glue code. --- src/linker.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/linker.cpp b/src/linker.cpp index 3ed924ac3..cfd09dd32 100644 --- a/src/linker.cpp +++ b/src/linker.cpp @@ -643,9 +643,10 @@ try_cross_linking:; android_glue_object = concatenate4_strings(temporary_allocator(), temp_dir, str_lit("android_native_app_glue-"), hash, str_lit(".o")); android_glue_static_lib = concatenate4_strings(permanent_allocator(), temp_dir, str_lit("libandroid_native_app_glue-"), hash, str_lit(".a")); - gbString glue = gb_string_make(heap_allocator(), clang_path); + gbString glue = gb_string_make_length(heap_allocator(), ODIN_ANDROID_NDK_TOOLCHAIN.text, ODIN_ANDROID_NDK_TOOLCHAIN.len); defer (gb_string_free(glue)); + glue = gb_string_append_fmt(glue, "bin/clang"); glue = gb_string_append_fmt(glue, " --target=aarch64-linux-android%d ", ODIN_ANDROID_API_LEVEL); glue = gb_string_appendc(glue, "-c \""); glue = gb_string_append_length(glue, ODIN_ANDROID_NDK.text, ODIN_ANDROID_NDK.len); @@ -808,6 +809,8 @@ try_cross_linking:; platform_lib_str = gb_string_append_length(platform_lib_str, ODIN_ANDROID_NDK_TOOLCHAIN_LIB_LEVEL.text, ODIN_ANDROID_NDK_TOOLCHAIN_LIB_LEVEL.len); platform_lib_str = gb_string_appendc(platform_lib_str, "\" "); + platform_lib_str = gb_string_appendc(platform_lib_str, "-landroid "); + platform_lib_str = gb_string_appendc(platform_lib_str, "\"--sysroot="); platform_lib_str = gb_string_append_length(platform_lib_str, ODIN_ANDROID_NDK_TOOLCHAIN_SYSROOT.text, ODIN_ANDROID_NDK_TOOLCHAIN_SYSROOT.len); platform_lib_str = gb_string_appendc(platform_lib_str, "\" "); @@ -840,12 +843,16 @@ try_cross_linking:; } } - gbString link_command_line = gb_string_make(heap_allocator(), clang_path); + gbString link_command_line = gb_string_make(heap_allocator(), ""); defer (gb_string_free(link_command_line)); if (is_android) { + gbString ndk_bin_directory = gb_string_make_length(temporary_allocator(), ODIN_ANDROID_NDK_TOOLCHAIN.text, ODIN_ANDROID_NDK_TOOLCHAIN.len); + link_command_line = gb_string_appendc(link_command_line, ndk_bin_directory); + link_command_line = gb_string_appendc(link_command_line, "bin/clang"); 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"); + } else { + link_command_line = gb_string_appendc(link_command_line, clang_path); } 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); From af91dd7c7a5cffaa6b4c5af5653a5129dd94ed73 Mon Sep 17 00:00:00 2001 From: IllusionMan1212 Date: Tue, 8 Apr 2025 01:30:55 +0200 Subject: [PATCH 2/2] android: always link liblog --- src/linker.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/linker.cpp b/src/linker.cpp index cfd09dd32..c87727974 100644 --- a/src/linker.cpp +++ b/src/linker.cpp @@ -810,6 +810,7 @@ try_cross_linking:; platform_lib_str = gb_string_appendc(platform_lib_str, "\" "); platform_lib_str = gb_string_appendc(platform_lib_str, "-landroid "); + platform_lib_str = gb_string_appendc(platform_lib_str, "-llog "); platform_lib_str = gb_string_appendc(platform_lib_str, "\"--sysroot="); platform_lib_str = gb_string_append_length(platform_lib_str, ODIN_ANDROID_NDK_TOOLCHAIN_SYSROOT.text, ODIN_ANDROID_NDK_TOOLCHAIN_SYSROOT.len);