SCsub 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #!/usr/bin/env python
  2. from misc.utility.scons_hints import *
  3. import platform
  4. import sys
  5. import platform_android_builders
  6. from methods import print_warning
  7. Import("env")
  8. android_files = [
  9. "os_android.cpp",
  10. "android_input_handler.cpp",
  11. "file_access_android.cpp",
  12. "file_access_filesystem_jandroid.cpp",
  13. "audio_driver_opensl.cpp",
  14. "dir_access_jandroid.cpp",
  15. "tts_android.cpp",
  16. "thread_jandroid.cpp",
  17. "net_socket_android.cpp",
  18. "java_godot_lib_jni.cpp",
  19. "java_class_wrapper.cpp",
  20. "java_godot_wrapper.cpp",
  21. "java_godot_view_wrapper.cpp",
  22. "java_godot_io_wrapper.cpp",
  23. "jni_utils.cpp",
  24. "android_keys_utils.cpp",
  25. "display_server_android.cpp",
  26. "plugin/godot_plugin_jni.cpp",
  27. "rendering_context_driver_vulkan_android.cpp",
  28. "variant/callable_jni.cpp",
  29. "dialog_utils_jni.cpp",
  30. "editor/game_menu_utils_jni.cpp",
  31. "editor/editor_utils_jni.cpp",
  32. ]
  33. env_android = env.Clone()
  34. android_objects = []
  35. for x in android_files:
  36. android_objects.append(env_android.SharedObject(x))
  37. env_thirdparty = env_android.Clone()
  38. env_thirdparty.disable_warnings()
  39. thirdparty_obj = env_thirdparty.SharedObject("#thirdparty/misc/ifaddrs-android.cc")
  40. android_objects.append(thirdparty_obj)
  41. # FIXME: Hardcoded to bin to ensure the directory exists if not redirecting build objects.
  42. lib = env_android.add_shared_library("#bin/libgodot", android_objects, redirect_build_objects=False)
  43. # Needed to force rebuilding the platform files when the thirdparty code is updated.
  44. env.Depends(lib, thirdparty_obj)
  45. lib_arch_dir = ""
  46. triple_target_dir = ""
  47. if env["arch"] == "arm32":
  48. lib_arch_dir = "armeabi-v7a"
  49. triple_target_dir = "arm-linux-androideabi"
  50. elif env["arch"] == "arm64":
  51. lib_arch_dir = "arm64-v8a"
  52. triple_target_dir = "aarch64-linux-android"
  53. elif env["arch"] == "x86_32":
  54. lib_arch_dir = "x86"
  55. triple_target_dir = "i686-linux-android"
  56. elif env["arch"] == "x86_64":
  57. lib_arch_dir = "x86_64"
  58. triple_target_dir = "x86_64-linux-android"
  59. else:
  60. print_warning("Architecture not suitable for embedding into APK; keeping .so at \\bin")
  61. host_subpath = ""
  62. if sys.platform.startswith("linux"):
  63. host_subpath = "linux-x86_64"
  64. elif sys.platform.startswith("darwin"):
  65. host_subpath = "darwin-x86_64"
  66. elif sys.platform.startswith("win"):
  67. if platform.machine().endswith("64"):
  68. host_subpath = "windows-x86_64"
  69. else:
  70. host_subpath = "windows"
  71. if lib_arch_dir != "" and host_subpath != "":
  72. if env.dev_build:
  73. lib_type_dir = "dev"
  74. elif env.debug_features:
  75. if env.editor_build and env["store_release"]:
  76. lib_type_dir = "release"
  77. else:
  78. lib_type_dir = "debug"
  79. else: # Release
  80. lib_type_dir = "release"
  81. if env.editor_build:
  82. lib_tools_dir = "tools/"
  83. else:
  84. lib_tools_dir = ""
  85. out_dir = "#platform/android/java/lib/libs/" + lib_tools_dir + lib_type_dir + "/" + lib_arch_dir
  86. env_android.CommandNoCache(out_dir + "/libgodot_android.so", lib, Move("$TARGET", "$SOURCE"))
  87. stl_lib_path = f"{env['ANDROID_NDK_ROOT']}/toolchains/llvm/prebuilt/{host_subpath}/sysroot/usr/lib/{triple_target_dir}/libc++_shared.so"
  88. env_android.CommandNoCache(out_dir + "/libc++_shared.so", stl_lib_path, Copy("$TARGET", "$SOURCE"))
  89. if env["generate_android_binaries"]:
  90. env_android.AlwaysBuild(
  91. env_android.CommandNoCache(
  92. "generate_android_binaries", lib, env.Run(platform_android_builders.generate_android_binaries)
  93. )
  94. )