godot/platform/android/SCsub
Pedro J. Estébanez f50e5dc594 Fix Android build error with SCons 3.0
Not sure why this happens without having upgraded Python itself, but is needed now.

Not needed for _master_ because there we have b6e1e47e3a that does this and more.

This commit does not address upgrading to Python 3.0. It just makes building for Android work again after upgrading SCons while keeping Python 2.7.
2017-10-14 20:53:00 +02:00

166 lines
5.2 KiB
Python

#!/usr/bin/env python
import shutil
Import('env')
android_files = [
'os_android.cpp',
'godot_android.cpp',
'file_access_android.cpp',
'dir_access_android.cpp',
'audio_driver_opensl.cpp',
'file_access_jandroid.cpp',
'dir_access_jandroid.cpp',
'thread_jandroid.cpp',
'audio_driver_jandroid.cpp',
'ifaddrs_android.cpp',
'android_native_app_glue.c',
'java_glue.cpp',
'cpu-features.c',
'java_class_wrapper.cpp'
]
# env.Depends('#core/math/vector3.h', 'vector3_psp.h')
#obj = env.SharedObject('godot_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))
prog = None
abspath = env.Dir(".").abspath
gradle_basein = open(abspath + "/build.gradle.template", "rb")
gradle_baseout = open(abspath + "/java/build.gradle", "wb")
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 = ""
gradle_default_config_text = ""
minSdk = 14
targetSdk = 23
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)
gradle_baseout.write(gradle_text)
gradle_baseout.close()
pp_basein = open(abspath + "/AndroidManifest.xml.template", "rb")
pp_baseout = open(abspath + "/java/AndroidManifest.xml", "wb")
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)
pp_baseout.write(manifest)
env_android.SharedLibrary("#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'] == '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"))