diff options
| author | Tobias Markmann <tm@ayena.de> | 2016-03-14 11:27:29 (GMT) | 
|---|---|---|
| committer | Tobias Markmann <tm@ayena.de> | 2016-03-14 16:00:29 (GMT) | 
| commit | 8cdebcff1d1e8321b070c7e675f9a9709a2b0b81 (patch) | |
| tree | 2be3bc1fb4636f208e4a872c213b8e18fa1bb45f | |
| parent | fcb5204aeacd6c4bf49223f133df285f22f7cd4b (diff) | |
| download | swift-8cdebcff1d1e8321b070c7e675f9a9709a2b0b81.zip swift-8cdebcff1d1e8321b070c7e675f9a9709a2b0b81.tar.bz2  | |
Build all Swift projects as C++11
Added a SCons compiler test so that the build process fails
early if C++11 is not supported.
Remove C++11 checks as we now default to C++11 and they are
not needed anymore.
Ignore a Clang warning if building 3rdParty Boost.
Test-Information:
Tested build and unit tests on OS X 10.11.3.
Change-Id: Icbecbd1e25e8d8bbe5f402f75355373a86b5f8a1
| -rw-r--r-- | 3rdParty/Boost/SConscript | 6 | ||||
| -rw-r--r-- | BuildTools/SCons/SConscript.boot | 15 | ||||
| -rw-r--r-- | BuildTools/SCons/SConstruct | 39 | ||||
| -rw-r--r-- | Documentation/SwiftenDevelopersGuide/Examples/EchoBot/SConscript | 21 | 
4 files changed, 53 insertions, 28 deletions
diff --git a/3rdParty/Boost/SConscript b/3rdParty/Boost/SConscript index d56f5e3..b3ed153 100644 --- a/3rdParty/Boost/SConscript +++ b/3rdParty/Boost/SConscript @@ -1,3 +1,5 @@ +import os +  Import("env")  # FIXME: Remove this when Boost UUID is present on most distros @@ -54,6 +56,10 @@ elif env.get("BOOST_BUNDLED", False) :  	if env["SCONS_STAGE"] == "build" :  		myenv = env.Clone()  		myenv.Replace(CXXFLAGS = [flag for flag in env["CXXFLAGS"] if not flag.startswith("-W")]) +		if os.path.basename(env["CXX"]) in ["clang", "clang++"] : +			myenv.Append(CXXFLAGS = [ +				"-Wno-deprecated-register", # The register keyword will be reserved in C++17, we only use C++11 though. +			])  		sources = [  				"src/libs/atomic/src/lockpool.cpp", diff --git a/BuildTools/SCons/SConscript.boot b/BuildTools/SCons/SConscript.boot index 10b0daf..1811b28 100644 --- a/BuildTools/SCons/SConscript.boot +++ b/BuildTools/SCons/SConscript.boot @@ -174,11 +174,9 @@ if env["PLATFORM"] == "darwin" and env["target"] == "native" :  			env["CCFLAGS"] = ["-arch", "x86_64"]  	if "cxx" not in env :  		env["CXX"] = "clang++" -		# Compiling Qt5 in C++0x mode includes headers that we don't have -		if not env["qt5"] : -			env["CXXFLAGS"] = ["-std=c++11"]  	if "link" not in env : -		env["LINK"] = "clang" +		# Use clang++ instead of clang, otherwise XCode's clang will cause linking errors due to missing C++ standard lib. +		env["LINK"] = "clang++"  		if platform.machine() == "x86_64" :  			env.Append(LINKFLAGS = ["-arch", "x86_64"]) @@ -201,6 +199,8 @@ if "ar" in env :  if "link" in env :  	env["SHLINK"] = env["link"]  	env["LINK"] = env["link"] + +# Process user-defined external flags  for flags_type in ["ccflags", "cxxflags", "linkflags"] :  	if flags_type in env :  		if isinstance(env[flags_type], str) : @@ -212,6 +212,10 @@ for flags_type in ["ccflags", "cxxflags", "linkflags"] :  # where you need it  env["OBJCCFLAGS"] = [] +# Compile code as C++11 +if env["PLATFORM"] != "win32" : +	env.Append(CXXFLAGS = ["-std=c++11"]) +  if env["optimize"] :  	if env["PLATFORM"] == "win32" :  		env.Append(CCFLAGS = ["/O2"]) @@ -303,7 +307,7 @@ elif env["PLATFORM"] == "sunos" :  	#env.Append(CXXFLAGS = ["-z verbose"])  	pass  else : -	if "clang" in env["CXX"] : +	if os.path.basename(env["CXX"]) in ["clang", "clang++"] :  		env.Append(CXXFLAGS = [  			"-Weverything",  			"-Wno-unknown-warning-option", # To stay compatible between CLang versions @@ -316,7 +320,6 @@ else :  			"-Wno-c++98-compat-pedantic", # We do different things that violate this, but they could be fixed  			"-Wno-global-constructors", # We depend on this for e.g. string constants  			"-Wno-disabled-macro-expansion", # Caused due to system headers -			"-Wno-c++11-extensions", # We use C++11; turn this off when we use -std=c++11  			"-Wno-long-long", # We use long long  			"-Wno-padded",  			"-Wno-missing-variable-declarations", # Getting rid of CPPUnit warnings diff --git a/BuildTools/SCons/SConstruct b/BuildTools/SCons/SConstruct index 3305fd3..173380e 100644 --- a/BuildTools/SCons/SConstruct +++ b/BuildTools/SCons/SConstruct @@ -68,6 +68,35 @@ def checkObjCHeader(context, header) :  	context.Result(ret)  	return ret +def checkForCpp11Support(context) : +	context.Message('Checking whether the C++ compiler supports C++11... ') +	result = context.TryLink( +		""" +#include <memory> + +int main(int, char **) { +	// shared_ptr test +	std::shared_ptr<int> intPtr = std::make_shared<int>(); + +	// unique_ptr test +	std::unique_ptr<int> intPtrUnique = std::unique_ptr<int>(new int(1)); + +	// auto test +	auto otherIntPtr = intPtr; +	std::shared_ptr<int> fooIntPtr = otherIntPtr; + +	// lambda test +	auto someFunction = [](int i){ i = i * i; }; + +	// nullptr test +	double* fooDouble = nullptr; +	return 0; +} +""", '.cpp') +	context.Result(result) +	return result + +  ################################################################################  # Platform configuration  ################################################################################ @@ -103,13 +132,19 @@ int main(int argc, char* argv[]) {  	else :  		return -1 - -conf = Configure(conf_env) +conf = Configure(conf_env, custom_tests = { +	'CheckCpp11Support' : checkForCpp11Support, +	})  if not conf.CheckCXX() or not conf.CheckCC() :  	print "Error: You need a working compiler"  	Exit(1) +if not conf.CheckCpp11Support() : +	print "Error: You need a compiler with support for the C++11 standard" +	Exit(1) + +  env["HAVE_ZLIB"] = True  zlib_flags = {}  zlib_okay = False diff --git a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/SConscript b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/SConscript index 5d27b70..f3cb0d7 100644 --- a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/SConscript +++ b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/SConscript @@ -13,24 +13,5 @@ example_env.UseFlags(example_env["SWIFTEN_DEP_FLAGS"])  for i in range(1,7) :  	example_env.Program("EchoBot" + str(i), ["EchoBot" + str(i) + ".cpp"]) +example_env.Program("EchoBot0x", "EchoBot0x.cpp")  example_env.Program("EchoComponent", "EchoComponent.cpp") - -# C++0x -cpp0x = False -cpp0x_env = example_env.Clone() -if env["PLATFORM"] == "win32" : -	if int(env["MSVS_VERSION"].split(".")[0]) >= 10 : -		cpp0x = True -elif env["PLATFORM"] == "hpux" : -	pass -elif env["PLATFORM"] == "sunos" : -	pass -else : -	if env["CCVERSION"].split(".") >= ["4", "5", "0"] : -		# Temporarily disabling c++0x mode because of problems with boost::thread -		# on some platforms -		#cpp0x = True -		cpp0x_env.Replace(CXXFLAGS = [flag for flag in env["CXXFLAGS"] if flag != "-Werror"]) -		cpp0x_env.Append(CXXFLAGS = ["-std=c++0x"]) -if cpp0x : -	cpp0x_env.Program("EchoBot0x", "EchoBot0x.cpp")  | 
 Swift