summaryrefslogtreecommitdiff
path: root/SConstruct
AgeCommit message (Collapse)Author
2020-02-24Scons: fixed build for vanilla clang in mac os xNickolai Korshunov
2020-02-23SCons: Add GCC/Clang minimum version checkRémi Verschelde
Prevent using GCC 8 as it does not properly support C++17's guaranteed copy elision which we now need. (Upstream bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86521) Follow-up to #36457 and #36436.
2020-02-23Replace FALLTHROUGH macro by C++17 [[fallthrough]]Rémi Verschelde
This attribute is now part of the standard we target so we no longer need compiler-specific hacks. Also enables -Wimplicit-fallthrough for Clang now that we can properly support it. It's already on by default for GCC's -Wextra. Fixes new warnings raised by Clang's -Wimplicit-fallthrough.
2020-02-22SCons: Ensure that MSVC gets /std:c++17 in CCFLAGSRémi Verschelde
We were running this logic too early, so `env.msvc` was not initialized yet and MSVC used the same branch as GCC/Clang.
2020-02-22SCons: Bump required C++ standard to C++17Rémi Verschelde
As per #36436, we now need C++17's guaranteed copy elision feature to solve ambiguities in Variant. Core developers discussed the idea to move from C++14 to C++17 as our minimum required C++ standard, and all agreed. Note that this doesn't mean that Godot is going to be written in "modern C++", but we'll use modern features where they make sense to simplify our "C with classes" codebase. Apart from new code written recently, most of the codebase still has to be ported to use newer features where relevant. Proper support for C++17 means that we need recent compiler versions: - GCC 7+ - Clang 6+ - VS 2017 15.7+ Additionally, C++17's `std::shared_mutex` (conditionally used by `vk_mem_alloc.h` when C++17 support is enabled) is only available in macOS 10.12+, so we increase our minimum supported version.
2020-02-20SCons: Explicitly define our C (C11) and C++ (C++14) standardsRémi Verschelde
On GCC and Clang, we use C11 and C++14 with GNU extensions (`std=gnu11` and `std=gnu++14`). Those are the defaults for current GCC and Clang, and also match the feature sets we want to use in Godot. On MSVC, we require C++14 support explicitly with `/std:c++14`, and make it strict with the use of `/permissive-` (so features of C++17 or later can't be used). Moves the definition before querying environment flags and platform config so that it can be overridden when necessary.
2020-02-18Fix compilation warnings and re-enable werror=yes on TravisRémi Verschelde
Fix -Wunused-variable, -Wunused-but-set-variable and -Wswitch warnings raised by GCC 8 and 9. Fix -Wunused-function, -Wunused-private-field and -Wtautological-constant-out-of-range-compare raised by Clang. Fix MSVC 2019 warning C4804 (unsafe use of type 'bool' in comparison operation). GCC -Wcpp warnings/Clang -W#warnings (`#warning`) are no longer raising errors and will thus not abort compilation with `werror=yes`. Treat glslang headers are system headers to avoid raising warnings. Re-enables us to build with `werror=yes` on Linux and macOS, thus catching warnings that would be introduced by new code. Fixes #36132.
2020-02-13Remove more deprecated methods and codeRémi Verschelde
2020-02-13Remove obsolete GLES3 backendRémi Verschelde
Due to the port to Vulkan and complete redesign of the rendering backend, the `drivers/gles3` code is no longer usable in this state and is not planned to be ported to the new architecture. The GLES2 backend is kept (while still disabled and non-working) as it will eventually be ported to serve as the low-end renderer for Godot 4.0. Some GLES3 features might be selectively ported to the updated GLES2 backend if there's a need for them, and extensions we can use for that. So long, OpenGL driver bugs!
2020-02-11glslang: Disable warnings and allow unbundlingRémi Verschelde
2020-02-11SCons: Streamline Vulkan buildsystem + fixupsRémi Verschelde
- Renamed option to `builtin_vulkan`, since that's the name of the library and if we were to add new components, we'd likely use that same option. - Merge `vulkan_loader/SCsub` in `vulkan/SCsub`. - Accordingly, don't use built-in Vulkan headers when not building against the built-in loader library. - Drop Vulkan registry which we don't appear to need currently. - Style and permission fixes.
2020-02-11Add runtime GLES2 / Vulkan context selection.bruvzg
2020-02-11Add static Vulkan loader.bruvzg
Initial Vulkan support for Windows. Initial Vulkan support for macOS.
2020-02-11A lot of progress with canvas rendering, still far from working.Juan Linietsky
2020-02-10- Integrated NavigationServer and Navigation2DServer.Andrea Catania
- Added Navigation Agents and Obstacles. - Integrated Collision Avoidance. This work has been kindly sponsored by IMVU.
2020-02-07SCons: Split libmodules.a in folder-based libsRémi Verschelde
This removes the need for the hacky split_libmodules logic on Windows, since all libs are now of manageable size.
2020-02-07Use modules_enabled.gen.h to improve inter dependency checksRémi Verschelde
- Fix build with gdscript module disabled. Fixes #31011. - Remove unused `gdscript` compile option. - Fix build with regex module disabled. - Fix ImageLoaderSVG to forward declare thirdparty structs.
2020-02-07SCons: Generate header with info on which modules are enabledRémi Verschelde
We already had `MODULE_*_ENABLED` defines but only in the modules environment, and a few custom `*_ENABLED` defines in the main env when we needed the information in core. Now this is defined in a single header which can be included in the files that need this information.
2020-01-01Added support to allow to compile Godot from the same directory while using ↵Fabian Mathews
different versions of python (cherry picked from commit beee8b37763dd25a105d75274b3f2fffe35f69e1)
2019-12-11SCons: Add 'split_libmodules' option to workaround linker issueRémi Verschelde
The new 'split_libmodules=yes' option is useful to work around linker command line size limitations when linking a huge number of objects. We're currently over 64k chars when linking libmodules.a on Windows with MinGW, which triggers issues as seen in #30892. Even on Linux, we can also reach linker command line size limitations by adding more custom modules. We force this option to True for MinGW on Windows, which fixes #30892. Additional changes to lib splitting: - Fix linking of the split module libs with interdependent symbols, hacking our way into LINKCOM and SHLINKCOM to set the `--start-group` and `--end-group` flags. - Fix Python 3 compatibility in `methods.split_lib()`. - Drop seemingly obsolete condition for 'msys' on 'posix'. - Drop the unnecessary 'split_drivers' as the drivers lib is no longer too big since we moved all thirdparty builds to modules. Co-authored-by: Hein-Pieter van Braam-Stewart <hp@tmm.cx>
2019-11-20pcre2: Use scons option to disable JIT on some platformsRémi Verschelde
Third-party platforms (e.g. console ports) need to be able to disable JIT support in the regex module too, so it can't be hardcoded in the module SCsub. This is cleaner this way anyway. Fixes #19316.
2019-10-10Remove dependency on the editor directory being in the build's include path.Marcel Admiraal
- Add or remove the necessary subdirectorires to the includes to remove dependency on the editor directory being in the build's include path. - Ensure includes in modified files conform to style guideline. - Remove editor from the build include path.
2019-08-11Prevent editor compilation with regex module disabled, which is not supportedPouleyKetchoupp
2019-07-22SCons: Enable C++11 on the whole codebaseRémi Verschelde
**Important:** This does not mean *yet* that C++11 features should be used in contributions to Godot's codebase. For now this change is done solely for feature branches working on Vulkan support and GDScript typed instruction sets for Godot 4.0, which will both use C++11 features and are based on the master branch. The plan is to start porting the codebase to C++11 after Godot 3.2 is released, following upcoming guidelines on the subset of new features that should be used, and when/how to use them. We will advertise clearly when C++11 contributions are open, especially once we start a coordinated effort to port Godot's massive codebase. In the meantime, please bear with us and good ol' C++03. :)
2019-07-17Add a `platform=list` SCons argument to list platformsHugo Locurcio
This also improves the message display and makes an invalid selection exit with a non-zero status code.
2019-07-04Remove libwebsocket. No longer used, yay!Fabio Alessandrelli
2019-06-28Add support for creating editor icons per moduleAndrii Doroshenko (Xrayez)
The functionality is similar to how `doc_classes` are retrieved per module. The build system will search for custom icons path defined per module via `get_icons_path()` method in `config.py` or default icons path. If such paths don't exist, only the editor's own icons will be built. Most module icons were moved from editor/icons to respective modules.
2019-06-20SCons: Enable -Wclobbered in warnings=extra for GCCRémi Verschelde
2019-06-19Enforce Unicode encoding in MSVCAndrii Doroshenko (Xrayez)
This can help to solve compilation issues on systems with Japanese locale with encodings like Shift_JIS and UTF-8-BOM. Also be more consistent using String::utf8() to represent cyrilic unicode characters in test_string.cpp Clarified some comments in test_string.cpp for some Unicode characters.
2019-06-15SCons: Enable -Werror and -Wextra in 'dev' build optionRémi Verschelde
We're close to being able to compile all platforms with -Werror -Wextra, so it's best if developers use those options when compiling their code as those checks are also done on CI. Also enabled -Wduplicated-branches on GCC.
2019-05-27Fix SCons automatic platform detection on LinuxHugo Locurcio
2019-05-27Merge pull request #29199 from mhilbrunner/no-platform-no-moreRémi Verschelde
Scons: Fix .editorconfig, autodetect platform argument if missing
2019-05-26Fixed typo in SConstructdankan1890
2019-05-26Scons: Autodetect platform if not specifiedMax Hilbrunner
Co-authored-by: Hugo Locurcio <hugo.locurcio@hugo.pro>
2019-05-19Fix typos with codespellRémi Verschelde
Using codespell 1.15.0. Method: ``` $ cat > ../godot-word-whitelist.txt << EOF ang curvelinear doubleclick leapyear lod merchantibility nd numer ois ony que seeked synching te uint unselect webp EOF $ codespell -w -q 3 -I ../godot-word-whitelist.txt --skip="./thirdparty,*.po" $ git diff // undo unwanted changes ```
2019-05-02Ignore a warning in _get_socket_error (-Wlogical-op).marxin
drivers/unix/net_socket_posix.cpp: In member function 'NetSocketPosix::NetError NetSocketPosix::_get_socket_error()': drivers/unix/net_socket_posix.cpp:197:22: warning: logical 'or' of equal expressions [-Wlogical-op] 197 | if (errno == EAGAIN || errno == EWOULDBLOCK) | ^ and: modules/mono/utils/string_utils.cpp: In function 'int {anonymous}::sfind(const String&, int)': modules/mono/utils/string_utils.cpp:68:48: error: logical 'or' of collectively exhaustive tests is always true [-Werror=logical-op] found = src[read_pos] == 's' || (c >= '0' || c <= '4'); ~~~~~~~~~^~~~~~~~~~~
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-07Android now (optionally) builds the template when exportingJuan Linietsky
Added new way to create add-ons Removed old way to create add-ons
2019-04-23Merge pull request #27868 from marxin/add-more-warningsHein-Pieter van Braam
Add more warnings on top of -Wall and -Wextra.
2019-04-19Drop unused thekla_atlas dependencyRémi Verschelde
Since f12cb82 @reduz dropped the use of the thirdparty thekla_atlas library, which is replaced by xatlas. Fixes #28180. Fixes #28182.
2019-04-10Add more warnings on top of -Wall and -Wextra.marxin
2019-04-06Remove unused importsHendrikto
2019-04-05Fix -Wimplicit-fallthrough warnings from GCC 8Rémi Verschelde
Adds `FALLTHROUGH` macro to specify when a fallthrough is intentional. Can be replaced by `[[fallthrough]]` if/when we switch to C++17. The warning is now enabled by default for GCC on `extra` warnings level (part of GCC's `-Wextra`). It's not enabled in Clang's `-Wextra` yet, but we could enable it manually once we switch to C++11. There's no equivalent feature in MSVC for now. Fixes #26135.
2019-04-05SCons: add `methods.using_clang` to check used compilerRémi Verschelde
Also rename `use_gcc` to `using_gcc` to make it clear that it returns a config but does not alter it.
2019-04-02Enable warnings=extra on clang and GCC testers.marxin
And remove 2 warnings from warnings=extra.
2019-02-27Fix -Wsign-compare warnings.marxin
I decided to modify code in a defensive way. Ideally functions like size() or length() should return an unsigned type.
2019-02-25Several fixes to make GLES2 on HTML5 work much better.Juan Linietsky
Changed math class error reporting to be a bit less paranoid.
2019-02-25Merge pull request #26160 from marxin/come-up-with-use_gccHein-Pieter van Braam
Come up with use_gcc.
2019-02-23Come up with use_gcc.marxin
Add new method. Fix wrong version condition for -fpie.