summaryrefslogtreecommitdiff
path: root/platform/android/detect.py
AgeCommit message (Collapse)Author
2022-10-04Merge pull request #66807 from ↵Rémi Verschelde
akien-mga/core-unix-remove-NO_FCNTL-and-NO_STATVFS Unix: Remove now unnecessary I/O defines, cleanup
2022-10-03Unix: Remove now unnecessary I/O defines, cleanupRémi Verschelde
- `LIBC_FILEIO_ENABLED` wasn't defined anywhere, even in _other platforms_. - `NO_NETWORK` is also never defined. It probably isn't enough anyway to disable network APIs in the current codebase. - `UNIX_SOCKET_UNAVAILABLE` is never defined in this code but used by some other platforms, clarify that. - `NO_STATVFS` can be removed as Android supports it since API level 19, which is our current min SDK level. It's also only used for `DirAccessUnix::get_space_left()` which is anyway overridden by `DirAccessJAndroid::get_space_left()` so it shouldn't make a difference. * Fixed documentation for `DirAccess.get_space_left()`. - `NO_FCNTL` is likely also a remnant of early Android days, in current NDK r23 it seems to be available. Also cleaned up unused `fcntl.h` includes. - `NO_ALLOCA` is never defined, and we use alloca in many places now.
2022-10-03Remove unsupported `NO_SAFE_CAST`/`-fno-rtti` from Android buildRémi Verschelde
Android was the last platform to still attempt to disable RTTI (for binary size), but both the Android editor and now the ICU library used by templates need RTTI. There could still be the possibility to support this for non-ICU template builds (i.e. without the TextServerAdvanced module), but since this isn't one of the build configurations we test regularly it's pretty risky to keep this option only for that specific use case. And our code is already littered with `dynamic_cast`s which weren't guarded with `!defined(NO_SAFE_CAST)`.
2022-09-30ci: add Python static analysis check via mypyJiri Suchan
2022-09-26SCons: Unify tools/target build type configurationRémi Verschelde
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-23SCons: Cleanup `DEBUG`, `_DEBUG` and `NDEBUG` definesRémi Verschelde
- `_DEBUG` is MSVC specific so it didn't make much sense to define for Android and iOS builds. - iOS was the only platform to define `DEBUG`. We don't use it anywhere outside thirdparty code, which we usually don't intend to debug, so it seems better to be consistent with other platforms. - Consistently define `NDEBUG` to disable assert behavior in both `release` and `release_debug` targets. This used to be set for `release` for all platforms, and `release_debug` for Android and iOS only. - Due to the above, I removed the only use we made of `assert()` in Godot code, which was only implemented for Unix anyway, should have been `DEV_ENABLED`, and is in PoolAllocator which we don't actually use. - The denoise and recast modules keep defining `NDEBUG` even for the `debug` target as we don't want OIDN and Embree asserting all over the place.
2022-09-23SCons: Remove redundant `-fomit-frame-pointer` and `-ftree-vectorize`Rémi Verschelde
- `-fomit-frame-pointer` is included automatically by both GCC and Clang in `-O1` and above. - `-ftree-vectorize` is included automatically by GCC in `-O2` and beyond, and seems always enabled by Clang. Closes #66296. See that issue for a detailed investigation.
2022-09-19SCons: Refactor handling of `production` flag and per-platform LTO defaultsRémi Verschelde
Fixup to #63288. See #65583 for the bug report. Co-authored-by: Cyberrebell <chainsaw75@web.de>
2022-09-08SCons: Refactor LTO options with `lto=<none|thin|full>`Rémi Verschelde
Adds support for LTO on macOS and Android. We don't have much experience with LTO on these platforms so for now we keep it disabled by default even when `production=yes` is set. Similarly for iOS where we ship object files for the user to link in Xcode so LTO makes builds extremely slow to link. `production=yes` defaults to full LTO. ThinLTO is much faster for LLVM-based compilers but seems to produce bigger binaries (at least for the Web platform).
2022-08-25Unify bits, arch, and android_arch into env["arch"]Aaron Franke
Fully removes the `bits` option and adapts the code that relied on it. Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
2022-07-07Use clang as assembler to ensure preprocessing is done, and add assembler ↵bruvzg
"target" flag.
2022-06-25Upgrade Android NDK to r23 LTSMarcel Admiraal
2022-05-13Increase compiler optimization when using `target=release` on iOS/AndroidHugo Locurcio
2021-12-10Misc build system fixesAaron Franke
2021-10-15SCons: Set `DEBUG_ENABLED` and `DEV_ENABLED` in SConstructRémi Verschelde
They're the same for all platforms so they don't need to be repeated in all platform definitions.
2021-10-14SCons: Add `DEV_ENABLED` defines for `target=debug` buildsRémi Verschelde
This will allow adding developer checks which will be fully compiled out in user builds, unlike `DEBUG_ENABLED` which is included in debug tempates and the editor builds. This define is not used yet, but we'll soon add code that uses it, and change some existing `DEBUG_ENABLED` checks to be performed only in dev builds. Related to godotengine/godot-proposals#3371.
2021-10-12Build for 64-bit ARM by default when compiling or exporting for AndroidHugo Locurcio
All Android devices that support Vulkan support 64-bit ARM. This also removes NEON opt-out code for ARMv7 as pretty much all ARMv7 devices also support NEON.
2021-08-22Replace HTTP links with HTTPS for sites with HTTPS versionsAaron Franke
2021-08-12Android: Use volk instead of NDK Vulkan headersRémi Verschelde
We no longer build the Vulkan loader, and volk lets us load it dynamically. Roblox uses volk on Android so it should work well for us too.
2021-08-12Use "volk" instead of statically linked Vulkan loader.bruvzg
2021-05-19Android: Remove `-fno-integrated-as`, it can break arm64v8 buildRémi Verschelde
We found that this flag causes this error on PR #48812 which does not add any fancy inline assembly: ``` /tmp/tile_set-ce236a.s: Assembler messages: /tmp/tile_set-ce236a.s:34676: Error: selected processor does not support `bfc x0,#32,#32' clang++: error: assembler command failed with exit code 1 (use -v to see invocation) ``` That flag is mentioned in various errors related to assembler failures on arm64v8 with Clang from the Android NDK. It was added in Godot in #6958 when migrating from GCC to Clang, and is indeed referenced in the NDK's Clang migration guide: https://android.googlesource.com/platform/ndk/+/master/docs/ClangMigration.md > Especially for ARM and ARM64, Clang is much stricter about assembler rules > than GCC/GAS. Use `-fno-integrated-as` if Clang reports errors in inline > assembly or assembly files that you don't wish to modernize. We don't get those errors nowadays so it seems the flag is no longer needed.
2021-05-17Make all file access 64-bit (uint64_t)Pedro J. Estébanez
This changes the types of a big number of variables. General rules: - Using `uint64_t` in general. We also considered `int64_t` but eventually settled on keeping it unsigned, which is also closer to what one would expect with `size_t`/`off_t`. - We only keep `int64_t` for `seek_end` (takes a negative offset from the end) and for the `Variant` bindings, since `Variant::INT` is `int64_t`. This means we only need to guard against passing negative values in `core_bind.cpp`. - Using `uint32_t` integers for concepts not needing such a huge range, like pages, blocks, etc. In addition: - Improve usage of integer types in some related places; namely, `DirAccess`, core binds. Note: - On Windows, `_ftelli64` reports invalid values when using 32-bit MinGW with version < 8.0. This was an upstream bug fixed in 8.0. It breaks support for big files on 32-bit Windows builds made with that toolchain. We might add a workaround. Fixes #44363. Fixes godotengine/godot-proposals#400. Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
2021-04-20[JS, Android] Re-add "no-exceptions" for export templates builds with ICU.bruvzg
2021-03-14Allow to not optimize release buildRafał Mikrut
2021-02-17Override `ANDROID_NDK_ROOT` based on the project ndk version.Fredia Huya-Kouadio
This helps resolve issues where the project ndk version differs from the one pointed by the `ANDROID_NDK_ROOT` environment variable (if it exists).
2021-02-18Android: Bump NDK version to 21.4.7075529Rémi Verschelde
This is what GitHub Actions now provide and they removed the previous 21.3.6528147. A bit annoying to have our hand forced this way but it's still 21.x so should be good to upgrade.
2021-01-05Improve the logic to compile for Android by automatically detecting and ↵Fredia Huya-Kouadio
setting up the Android NDK if needed.
2020-12-12Don't handle BaseException in build scriptsMarcel Admiraal
2020-11-26[Complex Text Layouts] Add third-party TextServer dependencies (ICU, ↵bruvzg
HarfBuzz, Graphite).
2020-07-26CI: Install master version of psf/blackRémi Verschelde
Until https://github.com/psf/black/pull/1328 makes it in a stable release, we have to use the latest from Git. Apply new style fixes done by latest black.
2020-07-23SCons: Remove unused DEBUG_MEMORY_ENABLED defineRémi Verschelde
Its last use was removed in Godot 3.0, so it no longer makes sense to define. Also removed `D3D_DEBUG_INFO` for Windows as it's likely a left over from a long time ago pre-opensourcing when Godot had some form of Direct3D 9 support?
2020-04-03Vulkan rendering for AndroidPouleyKetchoupp
2020-03-30SCons: Format buildsystem files with psf/blackRémi Verschelde
Configured for a max line length of 120 characters. psf/black is very opinionated and purposely doesn't leave much room for configuration. The output is mostly OK so that should be fine for us, but some things worth noting: - Manually wrapped strings will be reflowed, so by using a line length of 120 for the sake of preserving readability for our long command calls, it also means that some manually wrapped strings are back on the same line and should be manually merged again. - Code generators using string concatenation extensively look awful, since black puts each operand on a single line. We need to refactor these generators to use more pythonic string formatting, for which many options are available (`%`, `format` or f-strings). - CI checks and a pre-commit hook will be added to ensure that future buildsystem changes are well-formatted.
2020-03-18Removed unused code in android detect.py and SCsubunknown
2020-03-04Compilation fixes on AndroidPouleyKetchoupp
2019-08-27Android: Style fixes to manifest and build.gradleRémi Verschelde
2019-07-30Android: Remove unusable android_stl=no optionRémi Verschelde
As of 3.1 and later, we have too many thirdparty C++ dependencies and some internal uses of `new` and `delete` too for it to make sense to build without the STL on Android. The option has been broken since 3.0, and the "System STL" that we relied on for basic support of `new` and `delete` is likely to be dropped from the NDK: https://android.googlesource.com/platform/ndk/+/ndk-release-r20/docs/BuildSystemMaintainers.md#System-STL
2019-07-30Android: Drop support for NDK < r15Rémi Verschelde
NDK r15c was released over two years ago (July 2017), and we cannot build against r14b anyway as it seems to fail with our setup to link the STL.
2019-07-03SCons: Use CPPDEFINES instead of CPPFLAGS for pre-processor definesRémi Verschelde
It's the recommended way to set those, and is more portable (automatically prepends -D for GCC/Clang and /D for MSVC). We still use CPPFLAGS for some pre-processor flags which are not defines.
2019-06-19Deprecate armv6 support for Androidfhuya
2019-05-20SCons: Keep exceptions and rtti on Android, iOS and HTML5 tools buildRémi Verschelde
Those were disable to keep size small, and on Android avoid the dependency on the STL, but for tools build (editor) this is not really a concern. Note: as of today it's not possible to build tools=yes for those platforms, but this change is one of the necessary steps to enable it. Fixes #25262.
2019-05-13Merge pull request #28518 from clayjohn/GLES2-MSAARémi Verschelde
Added MSAA to GLES2 backend
2019-05-02added MSAA to GLES backendclayjohn
2019-04-30SCons: Always use env.Prepend for CPPPATHRémi Verschelde
Include paths are processed from left to right, so we use Prepend to ensure that paths to bundled thirdparty files will have precedence over system paths (e.g. `/usr/include` should have lowest priority).
2019-04-24SCons: Review uses of CCFLAGS, CXXFLAGS and CPPFLAGSRémi Verschelde
Many contributors (me included) did not fully understand what CCFLAGS, CXXFLAGS and CPPFLAGS refer to exactly, and were thus not using them in the way they are intended to be. As per the SCons manual: https://www.scons.org/doc/HTML/scons-user/apa.html - CCFLAGS: General options that are passed to the C and C++ compilers. - CFLAGS: General options that are passed to the C compiler (C only; not C++). - CXXFLAGS: General options that are passed to the C++ compiler. By default, this includes the value of $CCFLAGS, so that setting $CCFLAGS affects both C and C++ compilation. - CPPFLAGS: User-specified C preprocessor options. These will be included in any command that uses the C preprocessor, including not just compilation of C and C++ source files [...], but also [...] Fortran [...] and [...] assembly language source file[s]. TL;DR: Compiler options go to CCFLAGS, unless they must be restricted to either C (CFLAGS) or C++ (CXXFLAGS). Preprocessor defines go to CPPFLAGS.
2019-04-06Remove unused importsHendrikto
2019-03-02SCons: Move platform-specific Opus config to its moduleRémi Verschelde
2019-01-16SCons: Drop unused MPC_FIXED_POINT defineRémi Verschelde
2019-01-16Android: Add support for x86_64 architectureRémi Verschelde
Like arm64v8, this is only supported by API 21 and later, so we enforce 21 as min API for x86_64. Part of #25030.
2019-01-09Don't use -ffast-math or other unsafe math optimizationsHein-Pieter van Braam
Godot supports many different compilers and for production releases we have to support 3 currently: GCC8, Clang6, and MSVC2017. These compilers all do slightly different things with -ffast-math and it is causing issues now. See #24841, #24540, #10758, #10070. And probably other complaints about physics differences between release and release_debug builds. I've done some performance comparisons on Linux x86_64. All tests are ran 20 times. Bunnymark: (higher is better) (bunnies) min max stdev average fast-math 7332 7597 71 7432 this pr 7379 7779 108 7621 (102%) FPBench (gdscript port http://fpbench.org/) (lower is better) (ms) fast-math 15441 16127 192 15764 this pr 15671 16855 326 16001 (99%) Float_add (adding floats in a tight loop) (lower is better) (sec) fast-math 5.49 5.78 0.07 5.65 this pr 5.65 5.90 0.06 5.76 (98%) Float_div (dividing floats in a tight loop) (lower is better) (sec) fast-math 11.70 12.36 0.18 11.99 this pr 11.92 12.32 0.12 12.12 (99%) Float_mul (multiplying floats in a tight loop) (lower is better) (sec) fast-math 11.72 12.17 0.12 11.93 this pr 12.01 12.62 0.17 12.26 (97%) I have also looked at FPS numbers for tps-demo, 3d platformer, 2d platformer, and sponza and could not find any measurable difference. I believe that given the issues and oft-reported (physics) glitches on release builds I believe that the couple of percent of tight-loop floating point performance regression is well worth it. This fixes #24540 and fixes #24841