From 7af0dc1b439311dee0e8454d9bba681bcc867476 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Sun, 7 Aug 2022 16:46:17 +0200 Subject: [PATCH] Add support for setting C++ version for build module compilation --- .../Build/NativeCpp/CompileEnvironment.cs | 34 ++++++++++++++++++- .../Platforms/Unix/UnixToolchain.cs | 16 ++++++++- .../Platforms/Windows/WindowsToolchainBase.cs | 17 ++++++++++ 3 files changed, 65 insertions(+), 2 deletions(-) diff --git a/Source/Tools/Flax.Build/Build/NativeCpp/CompileEnvironment.cs b/Source/Tools/Flax.Build/Build/NativeCpp/CompileEnvironment.cs index bae5957a3..522099c62 100644 --- a/Source/Tools/Flax.Build/Build/NativeCpp/CompileEnvironment.cs +++ b/Source/Tools/Flax.Build/Build/NativeCpp/CompileEnvironment.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2012-2022 Wojciech Figat. All rights reserved. +// Copyright (c) 2012-2022 Wojciech Figat. All rights reserved. using System; using System.Collections.Generic; @@ -26,11 +26,42 @@ namespace Flax.Build.NativeCpp SmallCode } + /// + /// The compilation optimization hint. + /// + public enum CppVersion + { + /// + /// C++14 + /// + Cpp14, + + /// + /// C++17 + /// + Cpp17, + + /// + /// C++20 + /// + Cpp20, + + /// + /// The latest version supported by the compiler. + /// + Latest, + } + /// /// The C++ compilation environment required to build source files in the native modules. /// public class CompileEnvironment : ICloneable { + /// + /// C++ standard version to use for compilation. + /// + public CppVersion CppVersion = CppVersion.Cpp14; + /// /// Selects a predefined set of options that affect the size and speed of generated code. /// @@ -131,6 +162,7 @@ namespace Flax.Build.NativeCpp { var clone = new CompileEnvironment { + CppVersion = CppVersion, FavorSizeOrSpeed = FavorSizeOrSpeed, EnableExceptions = EnableExceptions, RuntimeTypeInfo = RuntimeTypeInfo, diff --git a/Source/Tools/Flax.Build/Platforms/Unix/UnixToolchain.cs b/Source/Tools/Flax.Build/Platforms/Unix/UnixToolchain.cs index bc35c1dd5..5418575c6 100644 --- a/Source/Tools/Flax.Build/Platforms/Unix/UnixToolchain.cs +++ b/Source/Tools/Flax.Build/Platforms/Unix/UnixToolchain.cs @@ -284,7 +284,21 @@ namespace Flax.Build.Platforms commonArgs.Add("-pipe"); commonArgs.Add("-x"); commonArgs.Add("c++"); - commonArgs.Add("-std=c++14"); + + // C++ version + switch (compileEnvironment.CppVersion) + { + case CppVersion.Cpp14: + commonArgs.Add("-std=c++14"); + break; + case CppVersion.Cpp17: + case CppVersion.Latest: + commonArgs.Add("-std=c++17"); + break; + case CppVersion.Cpp20: + commonArgs.Add("-std=c++20"); + break; + } commonArgs.Add("-Wdelete-non-virtual-dtor"); commonArgs.Add("-fno-math-errno"); diff --git a/Source/Tools/Flax.Build/Platforms/Windows/WindowsToolchainBase.cs b/Source/Tools/Flax.Build/Platforms/Windows/WindowsToolchainBase.cs index 1a7ebc0fd..3919fcafa 100644 --- a/Source/Tools/Flax.Build/Platforms/Windows/WindowsToolchainBase.cs +++ b/Source/Tools/Flax.Build/Platforms/Windows/WindowsToolchainBase.cs @@ -433,6 +433,23 @@ namespace Flax.Build.Platforms // Compile Without Linking commonArgs.Add("/c"); + // C++ version + switch (compileEnvironment.CppVersion) + { + case CppVersion.Cpp14: + commonArgs.Add("/std:c++14"); + break; + case CppVersion.Cpp17: + commonArgs.Add("/std:c++17"); + break; + case CppVersion.Cpp20: + commonArgs.Add("/std:c++20"); + break; + case CppVersion.Latest: + commonArgs.Add("/std:c++latest"); + break; + } + // Generate Intrinsic Functions if (compileEnvironment.IntrinsicFunctions) commonArgs.Add("/Oi");