SCsub 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #!/usr/bin/env python
  2. from misc.utility.scons_hints import *
  3. import subprocess
  4. import sys
  5. from methods import print_warning
  6. Import("env")
  7. android_files = [
  8. "os_android.cpp",
  9. "android_input_handler.cpp",
  10. "file_access_android.cpp",
  11. "file_access_filesystem_jandroid.cpp",
  12. "audio_driver_opensl.cpp",
  13. "dir_access_jandroid.cpp",
  14. "tts_android.cpp",
  15. "thread_jandroid.cpp",
  16. "net_socket_android.cpp",
  17. "java_godot_lib_jni.cpp",
  18. "java_class_wrapper.cpp",
  19. "java_godot_wrapper.cpp",
  20. "java_godot_view_wrapper.cpp",
  21. "java_godot_io_wrapper.cpp",
  22. "jni_utils.cpp",
  23. "android_keys_utils.cpp",
  24. "display_server_android.cpp",
  25. "plugin/godot_plugin_jni.cpp",
  26. "rendering_context_driver_vulkan_android.cpp",
  27. "variant/callable_jni.cpp",
  28. "dialog_utils_jni.cpp",
  29. "game_menu_utils_jni.cpp",
  30. ]
  31. env_android = env.Clone()
  32. android_objects = []
  33. for x in android_files:
  34. android_objects.append(env_android.SharedObject(x))
  35. env_thirdparty = env_android.Clone()
  36. env_thirdparty.disable_warnings()
  37. thirdparty_obj = env_thirdparty.SharedObject("#thirdparty/misc/ifaddrs-android.cc")
  38. android_objects.append(thirdparty_obj)
  39. lib = env_android.add_shared_library("#bin/libgodot", [android_objects], SHLIBSUFFIX=env["SHLIBSUFFIX"])
  40. # Needed to force rebuilding the platform files when the thirdparty code is updated.
  41. env.Depends(lib, thirdparty_obj)
  42. lib_arch_dir = ""
  43. if env["arch"] == "arm32":
  44. lib_arch_dir = "armeabi-v7a"
  45. elif env["arch"] == "arm64":
  46. lib_arch_dir = "arm64-v8a"
  47. elif env["arch"] == "x86_32":
  48. lib_arch_dir = "x86"
  49. elif env["arch"] == "x86_64":
  50. lib_arch_dir = "x86_64"
  51. else:
  52. print_warning("Architecture not suitable for embedding into APK; keeping .so at \\bin")
  53. if lib_arch_dir != "":
  54. if env.dev_build:
  55. lib_type_dir = "dev"
  56. elif env.debug_features:
  57. if env.editor_build and env["store_release"]:
  58. lib_type_dir = "release"
  59. else:
  60. lib_type_dir = "debug"
  61. else: # Release
  62. lib_type_dir = "release"
  63. if env.editor_build:
  64. lib_tools_dir = "tools/"
  65. else:
  66. lib_tools_dir = ""
  67. out_dir = "#platform/android/java/lib/libs/" + lib_tools_dir + lib_type_dir + "/" + lib_arch_dir
  68. env_android.Command(
  69. out_dir + "/libgodot_android.so", "#bin/libgodot" + env["SHLIBSUFFIX"], Move("$TARGET", "$SOURCE")
  70. )
  71. stl_lib_path = (
  72. str(env["ANDROID_NDK_ROOT"]) + "/sources/cxx-stl/llvm-libc++/libs/" + lib_arch_dir + "/libc++_shared.so"
  73. )
  74. env_android.Command(out_dir + "/libc++_shared.so", stl_lib_path, Copy("$TARGET", "$SOURCE"))
  75. def generate_apk(target, source, env):
  76. gradle_process = []
  77. if sys.platform.startswith("win"):
  78. gradle_process = [
  79. "cmd",
  80. "/c",
  81. "gradlew.bat",
  82. ]
  83. else:
  84. gradle_process = ["./gradlew"]
  85. gradle_process += [
  86. "generateGodotEditor" if env["target"] == "editor" else "generateGodotTemplates",
  87. "--quiet",
  88. ]
  89. if env["debug_symbols"]:
  90. gradle_process += ["-PdoNotStrip=true"]
  91. subprocess.run(
  92. gradle_process,
  93. cwd="platform/android/java",
  94. )
  95. if env["generate_apk"]:
  96. generate_apk_command = env_android.Command("generate_apk", [], generate_apk)
  97. command = env_android.AlwaysBuild(generate_apk_command)
  98. env_android.Depends(command, [lib])