| 
									
										
										
										
											2016-10-17 08:50:25 +02:00
										 |  |  | #!/usr/bin/env python | 
					
						
							| 
									
										
										
										
											2024-06-11 15:19:07 -05:00
										 |  |  | from misc.utility.scons_hints import * | 
					
						
							| 
									
										
										
										
											2016-10-17 08:50:25 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-22 09:56:39 +02:00
										 |  |  | import subprocess | 
					
						
							| 
									
										
										
										
											2024-05-21 15:14:59 +02:00
										 |  |  | import sys | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-26 12:35:07 -05:00
										 |  |  | from methods import print_warning | 
					
						
							| 
									
										
										
										
											2023-05-22 09:56:39 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  | Import("env") | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-27 11:16:33 +02:00
										 |  |  | android_files = [ | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     "os_android.cpp", | 
					
						
							| 
									
										
										
										
											2021-08-04 21:22:11 +02:00
										 |  |  |     "android_input_handler.cpp", | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     "file_access_android.cpp", | 
					
						
							| 
									
										
										
										
											2021-07-10 18:39:31 -07:00
										 |  |  |     "file_access_filesystem_jandroid.cpp", | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     "audio_driver_opensl.cpp", | 
					
						
							|  |  |  |     "dir_access_jandroid.cpp", | 
					
						
							| 
									
										
										
										
											2021-11-04 14:33:37 +02:00
										 |  |  |     "tts_android.cpp", | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     "thread_jandroid.cpp", | 
					
						
							|  |  |  |     "net_socket_android.cpp", | 
					
						
							|  |  |  |     "java_godot_lib_jni.cpp", | 
					
						
							|  |  |  |     "java_class_wrapper.cpp", | 
					
						
							|  |  |  |     "java_godot_wrapper.cpp", | 
					
						
							| 
									
										
										
										
											2020-11-01 03:30:40 +02:00
										 |  |  |     "java_godot_view_wrapper.cpp", | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     "java_godot_io_wrapper.cpp", | 
					
						
							|  |  |  |     "jni_utils.cpp", | 
					
						
							|  |  |  |     "android_keys_utils.cpp", | 
					
						
							| 
									
										
										
										
											2020-03-27 17:30:18 +01:00
										 |  |  |     "display_server_android.cpp", | 
					
						
							| 
									
										
										
										
											2022-01-26 13:50:58 -08:00
										 |  |  |     "plugin/godot_plugin_jni.cpp", | 
					
						
							| 
									
										
										
										
											2023-12-19 14:57:56 -03:00
										 |  |  |     "rendering_context_driver_vulkan_android.cpp", | 
					
						
							| 
									
										
										
										
											2024-11-20 10:10:17 -08:00
										 |  |  |     "variant/callable_jni.cpp", | 
					
						
							| 
									
										
										
										
											2025-01-03 09:24:38 +05:30
										 |  |  |     "dialog_utils_jni.cpp", | 
					
						
							| 
									
										
										
										
											2025-01-07 21:31:53 -08:00
										 |  |  |     "game_menu_utils_jni.cpp", | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | env_android = env.Clone() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 18:57:40 +01:00
										 |  |  | android_objects = [] | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | for x in android_files: | 
					
						
							| 
									
										
										
										
											2016-10-30 18:57:40 +01:00
										 |  |  |     android_objects.append(env_android.SharedObject(x)) | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-03 15:14:54 +02:00
										 |  |  | env_thirdparty = env_android.Clone() | 
					
						
							|  |  |  | env_thirdparty.disable_warnings() | 
					
						
							| 
									
										
										
										
											2020-12-17 16:01:36 +01:00
										 |  |  | thirdparty_obj = env_thirdparty.SharedObject("#thirdparty/misc/ifaddrs-android.cc") | 
					
						
							|  |  |  | android_objects.append(thirdparty_obj) | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-15 23:26:01 -05:00
										 |  |  | # FIXME: Hardcoded to bin to ensure the directory exists if not redirecting build objects. | 
					
						
							|  |  |  | lib = env_android.add_shared_library("#bin/libgodot", android_objects, redirect_build_objects=False) | 
					
						
							| 
									
										
										
										
											2016-06-15 15:21:18 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-17 16:01:36 +01:00
										 |  |  | # Needed to force rebuilding the platform files when the thirdparty code is updated. | 
					
						
							|  |  |  | env.Depends(lib, thirdparty_obj) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  | lib_arch_dir = "" | 
					
						
							| 
									
										
										
										
											2021-12-15 17:38:10 -08:00
										 |  |  | if env["arch"] == "arm32": | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     lib_arch_dir = "armeabi-v7a" | 
					
						
							| 
									
										
										
										
											2021-12-15 17:38:10 -08:00
										 |  |  | elif env["arch"] == "arm64": | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     lib_arch_dir = "arm64-v8a" | 
					
						
							| 
									
										
										
										
											2021-12-15 17:38:10 -08:00
										 |  |  | elif env["arch"] == "x86_32": | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     lib_arch_dir = "x86" | 
					
						
							| 
									
										
										
										
											2021-12-15 17:38:10 -08:00
										 |  |  | elif env["arch"] == "x86_64": | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     lib_arch_dir = "x86_64" | 
					
						
							| 
									
										
										
										
											2016-06-15 15:21:18 +02:00
										 |  |  | else: | 
					
						
							| 
									
										
										
										
											2024-04-26 12:35:07 -05:00
										 |  |  |     print_warning("Architecture not suitable for embedding into APK; keeping .so at \\bin") | 
					
						
							| 
									
										
										
										
											2016-06-15 15:21:18 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  | if lib_arch_dir != "": | 
					
						
							| 
									
										
										
										
											2022-10-05 08:24:50 -07:00
										 |  |  |     if env.dev_build: | 
					
						
							| 
									
										
										
										
											2021-06-25 16:45:16 +03:00
										 |  |  |         lib_type_dir = "dev" | 
					
						
							| 
									
										
										
										
											2022-10-05 08:24:50 -07:00
										 |  |  |     elif env.debug_features: | 
					
						
							| 
									
										
										
										
											2023-03-01 14: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 08:28:55 +02:00
										 |  |  |     else:  # Release | 
					
						
							|  |  |  |         lib_type_dir = "release" | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01: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 08:28:55 +02:00
										 |  |  |     if env.editor_build: | 
					
						
							| 
									
										
										
										
											2021-06-25 16:45:16 +03: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 | 
					
						
							| 
									
										
										
										
											2025-01-13 11:13:17 -06:00
										 |  |  |     env_android.Command(out_dir + "/libgodot_android.so", lib, Move("$TARGET", "$SOURCE")) | 
					
						
							| 
									
										
										
										
											2019-07-30 15:49:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02: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 09:56:39 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def generate_apk(target, source, env): | 
					
						
							| 
									
										
										
										
											2024-04-29 20:32:41 -04:00
										 |  |  |         gradle_process = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if sys.platform.startswith("win"): | 
					
						
							|  |  |  |             gradle_process = [ | 
					
						
							|  |  |  |                 "cmd", | 
					
						
							|  |  |  |                 "/c", | 
					
						
							|  |  |  |                 "gradlew.bat", | 
					
						
							|  |  |  |             ] | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             gradle_process = ["./gradlew"] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-28 14:43:02 -07: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 09:56:39 +02: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]) |