summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2020-02-22 18:15:47 +0100
committerRémi Verschelde <rverschelde@gmail.com>2020-02-22 20:00:21 +0100
commita4801674c5ca85e6ef3c1c82cadf951b3f438440 (patch)
treeda008e1616a730038ed47b010f96743c5947c4e8
parent92332eb23d7b000cbd0b7838b355c9f9f3ad4d0e (diff)
SCons: Bump required C++ standard to C++17
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.
-rw-r--r--SConstruct10
-rwxr-xr-xmisc/dist/osx_template.app/Contents/Info.plist6
-rwxr-xr-xmisc/dist/osx_tools.app/Contents/Info.plist4
-rw-r--r--platform/osx/detect.py4
4 files changed, 12 insertions, 12 deletions
diff --git a/SConstruct b/SConstruct
index 785686d428..eb59db006d 100644
--- a/SConstruct
+++ b/SConstruct
@@ -310,17 +310,17 @@ if selected_platform in platform_list:
env.Append(LINKFLAGS=str(LINKFLAGS).split())
# Set our C and C++ standard requirements.
- # Prepending to make it possible to override
+ # C++17 is required as we need guaranteed copy elision as per GH-36436.
+ # Prepending to make it possible to override.
if not env.msvc:
# Specifying GNU extensions support explicitly, which are supported by
- # both GCC and Clang. This mirrors GCC and Clang's current default
- # compile flags if no -std is specified.
+ # both GCC and Clang. Both currently default to gnu11 and gnu++14.
env.Prepend(CFLAGS=['-std=gnu11'])
- env.Prepend(CXXFLAGS=['-std=gnu++14'])
+ env.Prepend(CXXFLAGS=['-std=gnu++17'])
else:
# MSVC doesn't have clear C standard support, /std only covers C++.
# We apply it to CCFLAGS (both C and C++ code) in case it impacts C features.
- env.Prepend(CCFLAGS=['/std:c++14', '/permissive-'])
+ env.Prepend(CCFLAGS=['/std:c++17', '/permissive-'])
# Platform specific flags
flag_list = platform_flags[selected_platform]
diff --git a/misc/dist/osx_template.app/Contents/Info.plist b/misc/dist/osx_template.app/Contents/Info.plist
index 696c825594..3b765e6bb8 100755
--- a/misc/dist/osx_template.app/Contents/Info.plist
+++ b/misc/dist/osx_template.app/Contents/Info.plist
@@ -31,13 +31,13 @@
<key>NSHumanReadableCopyright</key>
<string>$copyright</string>
<key>LSMinimumSystemVersion</key>
- <string>10.9.0</string>
+ <string>10.12.0</string>
<key>LSMinimumSystemVersionByArchitecture</key>
<dict>
<key>x86_64</key>
- <string>10.9.0</string>
+ <string>10.12.0</string>
</dict>
<key>NSHighResolutionCapable</key>
$highres
</dict>
-</plist> \ No newline at end of file
+</plist>
diff --git a/misc/dist/osx_tools.app/Contents/Info.plist b/misc/dist/osx_tools.app/Contents/Info.plist
index 46550ba6c7..c519a232c4 100755
--- a/misc/dist/osx_tools.app/Contents/Info.plist
+++ b/misc/dist/osx_tools.app/Contents/Info.plist
@@ -33,11 +33,11 @@
<key>NSHumanReadableCopyright</key>
<string>© 2007-2020 Juan Linietsky, Ariel Manzur &amp; Godot Engine contributors</string>
<key>LSMinimumSystemVersion</key>
- <string>10.9.0</string>
+ <string>10.12.0</string>
<key>LSMinimumSystemVersionByArchitecture</key>
<dict>
<key>x86_64</key>
- <string>10.9.0</string>
+ <string>10.12.0</string>
</dict>
<key>NSHighResolutionCapable</key>
<true/>
diff --git a/platform/osx/detect.py b/platform/osx/detect.py
index 0b164a2c56..12ca5c10dc 100644
--- a/platform/osx/detect.py
+++ b/platform/osx/detect.py
@@ -164,5 +164,5 @@ def configure(env):
#env.Append(CPPDEFINES=['GLES_ENABLED', 'OPENGL_ENABLED'])
- env.Append(CCFLAGS=['-mmacosx-version-min=10.11'])
- env.Append(LINKFLAGS=['-mmacosx-version-min=10.11'])
+ env.Append(CCFLAGS=['-mmacosx-version-min=10.12'])
+ env.Append(LINKFLAGS=['-mmacosx-version-min=10.12'])