2016-10-17 14:50:25 +08:00
|
|
|
#!/usr/bin/env python
|
2024-06-12 04:19:07 +08:00
|
|
|
from misc.utility.scons_hints import *
|
2016-10-17 14:50:25 +08:00
|
|
|
|
2023-05-22 15:56:39 +08:00
|
|
|
import subprocess
|
2024-05-21 21:14:59 +08:00
|
|
|
import sys
|
|
|
|
|
2024-04-27 01:35:07 +08:00
|
|
|
from methods import print_warning
|
2023-05-22 15:56:39 +08:00
|
|
|
|
2020-03-30 14:28:32 +08:00
|
|
|
Import("env")
|
2014-02-10 09:10:30 +08:00
|
|
|
|
2019-08-27 17:16:33 +08:00
|
|
|
android_files = [
|
2020-03-30 14:28:32 +08:00
|
|
|
"os_android.cpp",
|
2021-08-05 03:22:11 +08:00
|
|
|
"android_input_handler.cpp",
|
2020-03-30 14:28:32 +08:00
|
|
|
"file_access_android.cpp",
|
2021-07-11 09:39:31 +08:00
|
|
|
"file_access_filesystem_jandroid.cpp",
|
2020-03-30 14:28:32 +08:00
|
|
|
"audio_driver_opensl.cpp",
|
|
|
|
"dir_access_jandroid.cpp",
|
2021-11-04 20:33:37 +08:00
|
|
|
"tts_android.cpp",
|
2020-03-30 14:28:32 +08:00
|
|
|
"thread_jandroid.cpp",
|
|
|
|
"net_socket_android.cpp",
|
|
|
|
"java_godot_lib_jni.cpp",
|
|
|
|
"java_class_wrapper.cpp",
|
|
|
|
"java_godot_wrapper.cpp",
|
2020-11-01 09:30:40 +08:00
|
|
|
"java_godot_view_wrapper.cpp",
|
2020-03-30 14:28:32 +08:00
|
|
|
"java_godot_io_wrapper.cpp",
|
|
|
|
"jni_utils.cpp",
|
|
|
|
"android_keys_utils.cpp",
|
2020-03-28 00:30:18 +08:00
|
|
|
"display_server_android.cpp",
|
2022-01-27 05:50:58 +08:00
|
|
|
"plugin/godot_plugin_jni.cpp",
|
2023-12-20 01:57:56 +08:00
|
|
|
"rendering_context_driver_vulkan_android.cpp",
|
2014-02-10 09:10:30 +08:00
|
|
|
]
|
|
|
|
|
|
|
|
env_android = env.Clone()
|
|
|
|
|
2016-10-31 01:57:40 +08:00
|
|
|
android_objects = []
|
2014-02-10 09:10:30 +08:00
|
|
|
for x in android_files:
|
2016-10-31 01:57:40 +08:00
|
|
|
android_objects.append(env_android.SharedObject(x))
|
2014-02-10 09:10:30 +08:00
|
|
|
|
2018-10-03 21:14:54 +08:00
|
|
|
env_thirdparty = env_android.Clone()
|
|
|
|
env_thirdparty.disable_warnings()
|
2020-12-17 23:01:36 +08:00
|
|
|
thirdparty_obj = env_thirdparty.SharedObject("#thirdparty/misc/ifaddrs-android.cc")
|
|
|
|
android_objects.append(thirdparty_obj)
|
2014-02-10 09:10:30 +08:00
|
|
|
|
2017-11-29 04:27:57 +08:00
|
|
|
lib = env_android.add_shared_library("#bin/libgodot", [android_objects], SHLIBSUFFIX=env["SHLIBSUFFIX"])
|
2016-06-15 21:21:18 +08:00
|
|
|
|
2020-12-17 23:01:36 +08:00
|
|
|
# Needed to force rebuilding the platform files when the thirdparty code is updated.
|
|
|
|
env.Depends(lib, thirdparty_obj)
|
|
|
|
|
2020-03-30 14:28:32 +08:00
|
|
|
lib_arch_dir = ""
|
2021-12-16 09:38:10 +08:00
|
|
|
if env["arch"] == "arm32":
|
2020-03-30 14:28:32 +08:00
|
|
|
lib_arch_dir = "armeabi-v7a"
|
2021-12-16 09:38:10 +08:00
|
|
|
elif env["arch"] == "arm64":
|
2020-03-30 14:28:32 +08:00
|
|
|
lib_arch_dir = "arm64-v8a"
|
2021-12-16 09:38:10 +08:00
|
|
|
elif env["arch"] == "x86_32":
|
2020-03-30 14:28:32 +08:00
|
|
|
lib_arch_dir = "x86"
|
2021-12-16 09:38:10 +08:00
|
|
|
elif env["arch"] == "x86_64":
|
2020-03-30 14:28:32 +08:00
|
|
|
lib_arch_dir = "x86_64"
|
2016-06-15 21:21:18 +08:00
|
|
|
else:
|
2024-04-27 01:35:07 +08:00
|
|
|
print_warning("Architecture not suitable for embedding into APK; keeping .so at \\bin")
|
2016-06-15 21:21:18 +08:00
|
|
|
|
2020-03-30 14:28:32 +08:00
|
|
|
if lib_arch_dir != "":
|
2022-10-05 23:24:50 +08:00
|
|
|
if env.dev_build:
|
2021-06-25 21:45:16 +08:00
|
|
|
lib_type_dir = "dev"
|
2022-10-05 23:24:50 +08:00
|
|
|
elif env.debug_features:
|
2023-03-02 06:09:30 +08:00
|
|
|
if env.editor_build and env["store_release"]:
|
|
|
|
lib_type_dir = "release"
|
|
|
|
else:
|
|
|
|
lib_type_dir = "debug"
|
SCons: Unify tools/target build type configuration
Implements https://github.com/godotengine/godot-proposals/issues/3371.
New `target` presets
====================
The `tools` option is removed and `target` changes to use three new presets,
which match the builds users are familiar with. These targets control the
default optimization level and enable editor-specific and debugging code:
- `editor`: Replaces `tools=yes target=release_debug`.
* Defines: `TOOLS_ENABLED`, `DEBUG_ENABLED`, `-O2`/`/O2`
- `template_debug`: Replaces `tools=no target=release_debug`.
* Defines: `DEBUG_ENABLED`, `-O2`/`/O2`
- `template_release`: Replaces `tools=no target=release`.
* Defines: `-O3`/`/O2`
New `dev_build` option
======================
The previous `target=debug` is now replaced by a separate `dev_build=yes`
option, which can be used in combination with either of the three targets,
and changes the following:
- `dev_build`: Defines `DEV_ENABLED`, disables optimization (`-O0`/`/0d`),
enables generating debug symbols, does not define `NDEBUG` so `assert()`
works in thirdparty libraries, adds a `.dev` suffix to the binary name.
Note: Unlike previously, `dev_build` defaults to off so that users who
compile Godot from source get an optimized and small build by default.
Engine contributors should now set `dev_build=yes` in their build scripts or
IDE configuration manually.
Changed binary names
====================
The name of generated binaries and object files are changed too, to follow
this format:
`godot.<platform>.<target>[.dev][.double].<arch>[.<extra_suffix>][.<ext>]`
For example:
- `godot.linuxbsd.editor.dev.arm64`
- `godot.windows.template_release.double.x86_64.mono.exe`
Be sure to update your links/scripts/IDE config accordingly.
More flexible `optimize` and `debug_symbols` options
====================================================
The optimization level and whether to generate debug symbols can be further
specified with the `optimize` and `debug_symbols` options. So the default
values listed above for the various `target` and `dev_build` combinations
are indicative and can be replaced when compiling, e.g.:
`scons p=linuxbsd target=template_debug dev_build=yes optimize=debug`
will make a "debug" export template with dev-only code enabled, `-Og`
optimization level for GCC/Clang, and debug symbols. Perfect for debugging
complex crashes at runtime in an exported project.
2022-09-22 14:28:55 +08:00
|
|
|
else: # Release
|
|
|
|
lib_type_dir = "release"
|
2016-10-31 01:44:57 +08:00
|
|
|
|
SCons: Unify tools/target build type configuration
Implements https://github.com/godotengine/godot-proposals/issues/3371.
New `target` presets
====================
The `tools` option is removed and `target` changes to use three new presets,
which match the builds users are familiar with. These targets control the
default optimization level and enable editor-specific and debugging code:
- `editor`: Replaces `tools=yes target=release_debug`.
* Defines: `TOOLS_ENABLED`, `DEBUG_ENABLED`, `-O2`/`/O2`
- `template_debug`: Replaces `tools=no target=release_debug`.
* Defines: `DEBUG_ENABLED`, `-O2`/`/O2`
- `template_release`: Replaces `tools=no target=release`.
* Defines: `-O3`/`/O2`
New `dev_build` option
======================
The previous `target=debug` is now replaced by a separate `dev_build=yes`
option, which can be used in combination with either of the three targets,
and changes the following:
- `dev_build`: Defines `DEV_ENABLED`, disables optimization (`-O0`/`/0d`),
enables generating debug symbols, does not define `NDEBUG` so `assert()`
works in thirdparty libraries, adds a `.dev` suffix to the binary name.
Note: Unlike previously, `dev_build` defaults to off so that users who
compile Godot from source get an optimized and small build by default.
Engine contributors should now set `dev_build=yes` in their build scripts or
IDE configuration manually.
Changed binary names
====================
The name of generated binaries and object files are changed too, to follow
this format:
`godot.<platform>.<target>[.dev][.double].<arch>[.<extra_suffix>][.<ext>]`
For example:
- `godot.linuxbsd.editor.dev.arm64`
- `godot.windows.template_release.double.x86_64.mono.exe`
Be sure to update your links/scripts/IDE config accordingly.
More flexible `optimize` and `debug_symbols` options
====================================================
The optimization level and whether to generate debug symbols can be further
specified with the `optimize` and `debug_symbols` options. So the default
values listed above for the various `target` and `dev_build` combinations
are indicative and can be replaced when compiling, e.g.:
`scons p=linuxbsd target=template_debug dev_build=yes optimize=debug`
will make a "debug" export template with dev-only code enabled, `-Og`
optimization level for GCC/Clang, and debug symbols. Perfect for debugging
complex crashes at runtime in an exported project.
2022-09-22 14:28:55 +08:00
|
|
|
if env.editor_build:
|
2021-06-25 21:45:16 +08:00
|
|
|
lib_tools_dir = "tools/"
|
|
|
|
else:
|
|
|
|
lib_tools_dir = ""
|
|
|
|
|
|
|
|
out_dir = "#platform/android/java/lib/libs/" + lib_tools_dir + lib_type_dir + "/" + lib_arch_dir
|
2020-03-30 14:28:32 +08:00
|
|
|
env_android.Command(
|
|
|
|
out_dir + "/libgodot_android.so", "#bin/libgodot" + env["SHLIBSUFFIX"], Move("$TARGET", "$SOURCE")
|
|
|
|
)
|
2019-07-30 21:49:31 +08:00
|
|
|
|
2020-03-30 14:28:32 +08:00
|
|
|
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"))
|
2023-05-22 15:56:39 +08:00
|
|
|
|
|
|
|
def generate_apk(target, source, env):
|
2024-04-30 08:32:41 +08:00
|
|
|
gradle_process = []
|
|
|
|
|
|
|
|
if sys.platform.startswith("win"):
|
|
|
|
gradle_process = [
|
|
|
|
"cmd",
|
|
|
|
"/c",
|
|
|
|
"gradlew.bat",
|
|
|
|
]
|
|
|
|
else:
|
|
|
|
gradle_process = ["./gradlew"]
|
|
|
|
|
2024-07-29 05:43:02 +08:00
|
|
|
gradle_process += [
|
|
|
|
"generateGodotEditor" if env["target"] == "editor" else "generateGodotTemplates",
|
|
|
|
"--quiet",
|
|
|
|
]
|
|
|
|
|
|
|
|
if env["debug_symbols"]:
|
|
|
|
gradle_process += ["-PdoNotStrip=true"]
|
|
|
|
|
|
|
|
subprocess.run(
|
|
|
|
gradle_process,
|
|
|
|
cwd="platform/android/java",
|
|
|
|
)
|
2023-05-22 15:56:39 +08:00
|
|
|
|
|
|
|
if env["generate_apk"]:
|
|
|
|
generate_apk_command = env_android.Command("generate_apk", [], generate_apk)
|
|
|
|
command = env_android.AlwaysBuild(generate_apk_command)
|
|
|
|
env_android.Depends(command, [lib])
|