#!/usr/bin/env python from misc.utility.scons_hints import * import platform import sys import platform_android_builders from methods import print_warning Import("env") android_files = [ "os_android.cpp", "android_input_handler.cpp", "file_access_android.cpp", "file_access_filesystem_jandroid.cpp", "audio_driver_opensl.cpp", "dir_access_jandroid.cpp", "tts_android.cpp", "thread_jandroid.cpp", "net_socket_android.cpp", "java_godot_lib_jni.cpp", "java_class_wrapper.cpp", "java_godot_wrapper.cpp", "java_godot_view_wrapper.cpp", "java_godot_io_wrapper.cpp", "jni_utils.cpp", "android_keys_utils.cpp", "display_server_android.cpp", "plugin/godot_plugin_jni.cpp", "rendering_context_driver_vulkan_android.cpp", "variant/callable_jni.cpp", "dialog_utils_jni.cpp", "editor/game_menu_utils_jni.cpp", "editor/editor_utils_jni.cpp", ] env_android = env.Clone() android_objects = [] for x in android_files: android_objects.append(env_android.SharedObject(x)) env_thirdparty = env_android.Clone() env_thirdparty.disable_warnings() thirdparty_obj = env_thirdparty.SharedObject("#thirdparty/misc/ifaddrs-android.cc") android_objects.append(thirdparty_obj) # FIXME: Hardcoded to bin to ensure the directory exists if not redirecting build objects. lib = env_android.add_shared_library("#bin/libgodot", android_objects, redirect_build_objects=False) # Needed to force rebuilding the platform files when the thirdparty code is updated. env.Depends(lib, thirdparty_obj) lib_arch_dir = "" triple_target_dir = "" if env["arch"] == "arm32": lib_arch_dir = "armeabi-v7a" triple_target_dir = "arm-linux-androideabi" elif env["arch"] == "arm64": lib_arch_dir = "arm64-v8a" triple_target_dir = "aarch64-linux-android" elif env["arch"] == "x86_32": lib_arch_dir = "x86" triple_target_dir = "i686-linux-android" elif env["arch"] == "x86_64": lib_arch_dir = "x86_64" triple_target_dir = "x86_64-linux-android" else: print_warning("Architecture not suitable for embedding into APK; keeping .so at \\bin") host_subpath = "" if sys.platform.startswith("linux"): host_subpath = "linux-x86_64" elif sys.platform.startswith("darwin"): host_subpath = "darwin-x86_64" elif sys.platform.startswith("win"): if platform.machine().endswith("64"): host_subpath = "windows-x86_64" else: host_subpath = "windows" if lib_arch_dir != "" and host_subpath != "": if env.dev_build: lib_type_dir = "dev" elif env.debug_features: if env.editor_build and env["store_release"]: lib_type_dir = "release" else: lib_type_dir = "debug" else: # Release lib_type_dir = "release" if env.editor_build: lib_tools_dir = "tools/" else: lib_tools_dir = "" jni_libs_dir = "#platform/android/java/lib/libs/" + lib_tools_dir + lib_type_dir + "/" out_dir = jni_libs_dir + lib_arch_dir env_android.CommandNoCache(out_dir + "/libgodot_android.so", lib, Move("$TARGET", "$SOURCE")) stl_lib_path = f"{env['ANDROID_NDK_ROOT']}/toolchains/llvm/prebuilt/{host_subpath}/sysroot/usr/lib/{triple_target_dir}/libc++_shared.so" env_android.CommandNoCache(out_dir + "/libc++_shared.so", stl_lib_path, Copy("$TARGET", "$SOURCE")) if env["debug_symbols"] and env["separate_debug_symbols"]: debug_symbols_zip_file = ( ("#bin/android-editor-" if env.editor_build else "#bin/android-template-") + lib_type_dir + "-native-symbols.zip" ) env_android.NoCache(Zip(debug_symbols_zip_file, jni_libs_dir, ZIPROOT=Dir(jni_libs_dir))) if env["generate_android_binaries"]: env_android.AlwaysBuild( env_android.CommandNoCache( "generate_android_binaries", lib, env.Run(platform_android_builders.generate_android_binaries) ) )