You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
- The `cpu-features.{c,h}` code was only used by chance by the webm
(libvpx) code, so I moved it there. It was actually introduced before
that and wasn't in use, and libvpx just happened to be able to
compile thanks to it being bundled.
It could potentially be compiled on the fly from the Android NDK, but
since we plan to replace the webm module by a GDNative plugin in the
near future, I went the bundling route.
- `ifaddrs_android.h` is already provided in the Android NDK as
`ifaddrs.h`, same as on other Unixes. Yet we cannot use it until we
up the min API level to 24, where `getifaddrs` is first defined.
I moved the files to `thirdparty/misc` and synced them with upstream
WebRTC (only indentation changes and removal of `static` qualifiers).
Also removes dropped thirdparty files from COPYRIGHT.txt after changes
in #24105 and #24145.
170 lines
5.8 KiB
Python
170 lines
5.8 KiB
Python
#!/usr/bin/env python
|
|
|
|
Import('env')
|
|
|
|
import shutil
|
|
from compat import open_utf8
|
|
from distutils.version import LooseVersion
|
|
from detect import get_ndk_version
|
|
|
|
android_files = [
|
|
|
|
'os_android.cpp',
|
|
'file_access_android.cpp',
|
|
'audio_driver_opensl.cpp',
|
|
'file_access_jandroid.cpp',
|
|
'dir_access_jandroid.cpp',
|
|
'thread_jandroid.cpp',
|
|
'audio_driver_jandroid.cpp',
|
|
'java_glue.cpp',
|
|
'java_class_wrapper.cpp',
|
|
# 'power_android.cpp'
|
|
]
|
|
|
|
env_android = env.Clone()
|
|
if env['target'] == "profile":
|
|
env_android.Append(CPPFLAGS=['-DPROFILER_ENABLED'])
|
|
|
|
android_objects = []
|
|
for x in android_files:
|
|
android_objects.append(env_android.SharedObject(x))
|
|
|
|
env_thirdparty = env_android.Clone()
|
|
env_thirdparty.disable_warnings()
|
|
android_objects.append(env_thirdparty.SharedObject('#thirdparty/misc/ifaddrs-android.cc'))
|
|
|
|
abspath = env.Dir(".").abspath
|
|
|
|
with open_utf8(abspath + "/build.gradle.template", "r") as gradle_basein:
|
|
gradle_text = gradle_basein.read()
|
|
|
|
gradle_maven_flat_text = ""
|
|
if len(env.android_flat_dirs) > 0:
|
|
gradle_maven_flat_text += "flatDir {\n"
|
|
gradle_maven_flat_text += "\tdirs "
|
|
for x in env.android_flat_dirs:
|
|
gradle_maven_flat_text += "'" + x + "',"
|
|
|
|
gradle_maven_flat_text = gradle_maven_flat_text[:-1]
|
|
gradle_maven_flat_text += "\n\t}\n"
|
|
|
|
gradle_maven_repos_text = ""
|
|
gradle_maven_repos_text += gradle_maven_flat_text
|
|
|
|
if len(env.android_maven_repos) > 0:
|
|
gradle_maven_repos_text += ""
|
|
for x in env.android_maven_repos:
|
|
gradle_maven_repos_text += "\tmaven {\n"
|
|
gradle_maven_repos_text += "\t" + x + "\n"
|
|
gradle_maven_repos_text += "\t}\n"
|
|
|
|
gradle_maven_dependencies_text = ""
|
|
|
|
for x in env.android_dependencies:
|
|
gradle_maven_dependencies_text += x + "\n\t"
|
|
|
|
gradle_java_dirs_text = ""
|
|
|
|
for x in env.android_java_dirs:
|
|
gradle_java_dirs_text += ",'" + x.replace("\\", "/") + "'"
|
|
|
|
gradle_plugins = ""
|
|
for x in env.android_gradle_plugins:
|
|
gradle_plugins += "apply plugin: \"" + x + "\"\n"
|
|
|
|
gradle_classpath = ""
|
|
for x in env.android_gradle_classpath:
|
|
gradle_classpath += "\t\tclasspath \"" + x + "\"\n"
|
|
|
|
gradle_res_dirs_text = ""
|
|
|
|
for x in env.android_res_dirs:
|
|
gradle_res_dirs_text += ",'" + x.replace("\\", "/") + "'"
|
|
|
|
gradle_aidl_dirs_text = ""
|
|
|
|
for x in env.android_aidl_dirs:
|
|
gradle_aidl_dirs_text += ",'" + x.replace("\\", "/") + "'"
|
|
|
|
gradle_jni_dirs_text = ""
|
|
|
|
for x in env.android_jni_dirs:
|
|
gradle_jni_dirs_text += ",'" + x.replace("\\", "/") + "'"
|
|
|
|
gradle_asset_dirs_text = ""
|
|
|
|
for x in env.android_asset_dirs:
|
|
gradle_asset_dirs_text += ",'" + x.replace("\\", "/") + "'"
|
|
|
|
gradle_default_config_text = ""
|
|
|
|
minSdk = 18
|
|
targetSdk = 28
|
|
|
|
for x in env.android_default_config:
|
|
if x.startswith("minSdkVersion") and int(x.split(" ")[-1]) < minSdk:
|
|
x = "minSdkVersion " + str(minSdk)
|
|
if x.startswith("targetSdkVersion") and int(x.split(" ")[-1]) > targetSdk:
|
|
x = "targetSdkVersion " + str(targetSdk)
|
|
|
|
gradle_default_config_text += x + "\n\t\t"
|
|
|
|
if "minSdkVersion" not in gradle_default_config_text:
|
|
gradle_default_config_text += ("minSdkVersion " + str(minSdk) + "\n\t\t")
|
|
|
|
if "targetSdkVersion" not in gradle_default_config_text:
|
|
gradle_default_config_text += ("targetSdkVersion " + str(targetSdk) + "\n\t\t")
|
|
|
|
gradle_text = gradle_text.replace("$$GRADLE_REPOSITORY_URLS$$", gradle_maven_repos_text)
|
|
gradle_text = gradle_text.replace("$$GRADLE_DEPENDENCIES$$", gradle_maven_dependencies_text)
|
|
gradle_text = gradle_text.replace("$$GRADLE_JAVA_DIRS$$", gradle_java_dirs_text)
|
|
gradle_text = gradle_text.replace("$$GRADLE_RES_DIRS$$", gradle_res_dirs_text)
|
|
gradle_text = gradle_text.replace("$$GRADLE_ASSET_DIRS$$", gradle_asset_dirs_text)
|
|
gradle_text = gradle_text.replace("$$GRADLE_AIDL_DIRS$$", gradle_aidl_dirs_text)
|
|
gradle_text = gradle_text.replace("$$GRADLE_JNI_DIRS$$", gradle_jni_dirs_text)
|
|
gradle_text = gradle_text.replace("$$GRADLE_DEFAULT_CONFIG$$", gradle_default_config_text)
|
|
gradle_text = gradle_text.replace("$$GRADLE_PLUGINS$$", gradle_plugins)
|
|
gradle_text = gradle_text.replace("$$GRADLE_CLASSPATH$$", gradle_classpath)
|
|
|
|
with open_utf8(abspath + "/java/build.gradle", "w") as gradle_baseout:
|
|
gradle_baseout.write(gradle_text)
|
|
|
|
|
|
with open_utf8(abspath + "/AndroidManifest.xml.template", "r") as pp_basein:
|
|
manifest = pp_basein.read()
|
|
|
|
manifest = manifest.replace("$$ADD_APPLICATION_CHUNKS$$", env.android_manifest_chunk)
|
|
manifest = manifest.replace("$$ADD_PERMISSION_CHUNKS$$", env.android_permission_chunk)
|
|
manifest = manifest.replace("$$ADD_APPATTRIBUTE_CHUNKS$$", env.android_appattributes_chunk)
|
|
|
|
with open_utf8(abspath + "/java/AndroidManifest.xml", "w") as pp_baseout:
|
|
pp_baseout.write(manifest)
|
|
|
|
|
|
lib = env_android.add_shared_library("#bin/libgodot", [android_objects], SHLIBSUFFIX=env["SHLIBSUFFIX"])
|
|
|
|
lib_arch_dir = ''
|
|
if env['android_arch'] == 'armv6':
|
|
lib_arch_dir = 'armeabi'
|
|
elif env['android_arch'] == 'armv7':
|
|
lib_arch_dir = 'armeabi-v7a'
|
|
elif env['android_arch'] == 'arm64v8':
|
|
lib_arch_dir = 'arm64-v8a'
|
|
elif env['android_arch'] == 'x86':
|
|
lib_arch_dir = 'x86'
|
|
else:
|
|
print('WARN: Architecture not suitable for embedding into APK; keeping .so at \\bin')
|
|
|
|
if lib_arch_dir != '':
|
|
if env['target'] == 'release':
|
|
lib_type_dir = 'release'
|
|
else: # release_debug, debug
|
|
lib_type_dir = 'debug'
|
|
|
|
out_dir = '#platform/android/java/libs/' + lib_type_dir + '/' + lib_arch_dir
|
|
env_android.Command(out_dir + '/libgodot_android.so', '#bin/libgodot' + env['SHLIBSUFFIX'], Move("$TARGET", "$SOURCE"))
|
|
ndk_version = get_ndk_version(env["ANDROID_NDK_ROOT"])
|
|
if ndk_version != None and LooseVersion(ndk_version) >= LooseVersion("15.0.4075724"):
|
|
stl_lib_path = str(env['ANDROID_NDK_ROOT']) + '/sources/cxx-stl/llvm-libc++/libs/' + lib_arch_dir + '/libc++_shared.so'
|
|
env_android.Command(out_dir + '/libc++_shared.so', stl_lib_path, Copy("$TARGET", "$SOURCE"))
|