Merge topic 'vs-clang-cl'
491b41dd
Help: Add notes for topic 'vs-clang-cl'ad6d27ac
Tests: do not build PrecompiledHeader on Clang/C2a0f0541f
Tests: fix PDBDirectoryAndName on Clang/C23541af67
Tests: fix Plugin building on Clang/C21902c293
Tests: fix complexOneConfig building on Clang/C2cab2ec11
Tests: fix Complex building on Clang/C2ada3736c
Tests: fix Module.GenerateExportHeader building on Clang/C2123b7e13
Tests: fix AliasTarget building on Clang/C2445d4d4b
VS 14: Add flag map for -std= to CppLanguageStandard tag in project files0a785eb4
Features: Clang has no cxx_decltype_incomplete_return_type in MSVC sim mode2c2ec488
VS: in Clang/C2 toolset, setup correct compiler settings37afe00f
CMakeDetermineCompilerId: Add detection of clang.exe bundled with VS
This commit is contained in:
commit
612a8b3bd8
|
@ -0,0 +1,5 @@
|
|||
vs-clang-cl
|
||||
-----------
|
||||
|
||||
* The :generator:`Visual Studio 14 2015` generator learned to support the
|
||||
Clang/C2 toolsets, e.g. with the ``-T v140_clang_3_7`` option.
|
|
@ -157,7 +157,11 @@ Id flags: ${testflags}
|
|||
set(vs_version ${CMAKE_MATCH_1})
|
||||
set(id_platform ${CMAKE_VS_PLATFORM_NAME})
|
||||
set(id_lang "${lang}")
|
||||
set(id_cl cl.exe)
|
||||
if(CMAKE_VS_PLATFORM_TOOLSET MATCHES "v[0-9]+_clang_.*")
|
||||
set(id_cl clang.exe)
|
||||
else()
|
||||
set(id_cl cl.exe)
|
||||
endif()
|
||||
if(CMAKE_VS_PLATFORM_NAME STREQUAL "Tegra-Android")
|
||||
set(v NsightTegra)
|
||||
set(ext vcxproj)
|
||||
|
|
|
@ -8,7 +8,6 @@ set(testable_features
|
|||
cxx_constexpr
|
||||
cxx_contextual_conversions
|
||||
cxx_decltype
|
||||
cxx_decltype_incomplete_return_types
|
||||
cxx_default_function_template_args
|
||||
cxx_defaulted_functions
|
||||
cxx_delegating_constructors
|
||||
|
@ -36,6 +35,9 @@ set(testable_features
|
|||
cxx_variable_templates
|
||||
cxx_variadic_templates
|
||||
)
|
||||
if(NOT "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
|
||||
list(APPEND testable_features cxx_decltype_incomplete_return_types)
|
||||
endif()
|
||||
|
||||
foreach(feature ${testable_features})
|
||||
set(_cmake_feature_test_${feature} "${_cmake_oldestSupported} && __has_feature(${feature})")
|
||||
|
|
|
@ -194,8 +194,14 @@ else()
|
|||
if(_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM" OR _MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM")
|
||||
set(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib")
|
||||
elseif(MSVC_VERSION GREATER 1310)
|
||||
set(_RTC1 "/RTC1")
|
||||
set(_FLAGS_CXX " /GR /EHsc")
|
||||
if(CMAKE_VS_PLATFORM_TOOLSET MATCHES "v[0-9]+_clang_.*")
|
||||
# Clang/C2 in MSVC14 Update 1 seems to not support -fsantinize (yet?)
|
||||
# set(_RTC1 "-fsantinize=memory,safe-stack")
|
||||
set(_FLAGS_CXX " -frtti -fexceptions")
|
||||
else()
|
||||
set(_RTC1 "/RTC1")
|
||||
set(_FLAGS_CXX " /GR /EHsc")
|
||||
endif()
|
||||
set(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib")
|
||||
else()
|
||||
set(_RTC1 "/GZ")
|
||||
|
@ -296,11 +302,21 @@ macro(__windows_compiler_msvc lang)
|
|||
set(CMAKE_${lang}_LINK_EXECUTABLE
|
||||
"${_CMAKE_VS_LINK_EXE}<CMAKE_LINKER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR>${_PLATFORM_LINK_FLAGS} <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}")
|
||||
|
||||
set(CMAKE_${lang}_FLAGS_INIT "${_PLATFORM_DEFINES}${_PLATFORM_DEFINES_${lang}} /D_WINDOWS /W3${_FLAGS_${lang}}")
|
||||
set(CMAKE_${lang}_FLAGS_DEBUG_INIT "/D_DEBUG /MDd /Zi /Ob0 /Od ${_RTC1}")
|
||||
set(CMAKE_${lang}_FLAGS_RELEASE_INIT "/MD /O2 /Ob2 /D NDEBUG")
|
||||
set(CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "/MD /Zi /O2 /Ob1 /D NDEBUG")
|
||||
set(CMAKE_${lang}_FLAGS_MINSIZEREL_INIT "/MD /O1 /Ob1 /D NDEBUG")
|
||||
if(CMAKE_VS_PLATFORM_TOOLSET MATCHES "v[0-9]+_clang_.*")
|
||||
# note: MSVC 14 2015 Update 1 sets -fno-ms-compatibility by default, but this does not allow to compile many projects
|
||||
# that include MS's own headers. CMake itself is affected project too.
|
||||
set(CMAKE_${lang}_FLAGS_INIT "${_PLATFORM_DEFINES}${_PLATFORM_DEFINES_${lang}} -fms-extensions -fms-compatibility -D_WINDOWS -Wall${_FLAGS_${lang}}")
|
||||
set(CMAKE_${lang}_FLAGS_DEBUG_INIT "-D_DEBUG /MDd -gline-tables-only -fno-inline -O0 ${_RTC1}")
|
||||
set(CMAKE_${lang}_FLAGS_RELEASE_INIT "/MD -O2 -D NDEBUG")
|
||||
set(CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "/MD -gline-tables-only -O2 -fno-inline -D NDEBUG")
|
||||
set(CMAKE_${lang}_FLAGS_MINSIZEREL_INIT "/MD -Os -D NDEBUG")
|
||||
else()
|
||||
set(CMAKE_${lang}_FLAGS_INIT "${_PLATFORM_DEFINES}${_PLATFORM_DEFINES_${lang}} /D_WINDOWS /W3${_FLAGS_${lang}}")
|
||||
set(CMAKE_${lang}_FLAGS_DEBUG_INIT "/D_DEBUG /MDd /Zi /Ob0 /Od ${_RTC1}")
|
||||
set(CMAKE_${lang}_FLAGS_RELEASE_INIT "/MD /O2 /Ob2 /D NDEBUG")
|
||||
set(CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "/MD /Zi /O2 /Ob1 /D NDEBUG")
|
||||
set(CMAKE_${lang}_FLAGS_MINSIZEREL_INIT "/MD /O1 /Ob1 /D NDEBUG")
|
||||
endif()
|
||||
set(CMAKE_${lang}_LINKER_SUPPORTS_PDB ON)
|
||||
set(CMAKE_NINJA_DEPTYPE_${lang} msvc)
|
||||
|
||||
|
|
|
@ -28,6 +28,8 @@ static cmVS7FlagTable cmVS14CLFlagTable[] =
|
|||
"Custom", "Custom", 0},
|
||||
{"Optimization", "Od",
|
||||
"Disabled", "Disabled", 0},
|
||||
{"Optimization", "Os",
|
||||
"Minimize Size", "MinSize", 0},
|
||||
{"Optimization", "O1",
|
||||
"Minimize Size", "MinSpace", 0},
|
||||
{"Optimization", "O2",
|
||||
|
@ -172,6 +174,24 @@ static cmVS7FlagTable cmVS14CLFlagTable[] =
|
|||
{"CompileAsManaged", "clr:oldSyntax",
|
||||
"Common Language RunTime Support, Old Syntax", "OldSyntax", 0},
|
||||
|
||||
{"CppLanguageStandard", "",
|
||||
"Default", "Default", 0},
|
||||
{"CppLanguageStandard", "std=c++98",
|
||||
"C++03", "c++98", 0},
|
||||
{"CppLanguageStandard", "std=c++11",
|
||||
"C++11", "c++11", 0},
|
||||
{"CppLanguageStandard", "std=c++1y",
|
||||
"C++14", "c++1y", 0 },
|
||||
{"CppLanguageStandard", "std=c++14",
|
||||
"C++14", "c++1y", 0 },
|
||||
{"CppLanguageStandard", "std=gnu++98",
|
||||
"C++03 (GNU Dialect)", "gnu++98", 0},
|
||||
{"CppLanguageStandard", "std=gnu++11",
|
||||
"C++11 (GNU Dialect)", "gnu++11", 0},
|
||||
{"CppLanguageStandard", "std=gnu++1y",
|
||||
"C++14 (GNU Dialect)", "gnu++1y", 0},
|
||||
{"CppLanguageStandard", "std=gnu++14",
|
||||
"C++14 (GNU Dialect)", "gnu++1y", 0},
|
||||
|
||||
//Bool Properties
|
||||
{"CompileAsWinRT", "ZW", "", "true", 0},
|
||||
|
|
|
@ -2078,7 +2078,18 @@ void cmVisualStudio10TargetGenerator::WriteClOptions(
|
|||
|
||||
if(this->MSTools)
|
||||
{
|
||||
this->WriteString("<ObjectFileName>$(IntDir)</ObjectFileName>\n", 3);
|
||||
cmsys::RegularExpression clangToolset("v[0-9]+_clang_.*");
|
||||
const char* toolset = this->GlobalGenerator->GetPlatformToolset();
|
||||
if (toolset && clangToolset.find(toolset))
|
||||
{
|
||||
this->WriteString("<ObjectFileName>"
|
||||
"$(IntDir)%(filename).obj"
|
||||
"</ObjectFileName>\n", 3);
|
||||
}
|
||||
else
|
||||
{
|
||||
this->WriteString("<ObjectFileName>$(IntDir)</ObjectFileName>\n", 3);
|
||||
}
|
||||
|
||||
// If not in debug mode, write the DebugInformationFormat field
|
||||
// without value so PDBs don't get generated uselessly.
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
cmake_minimum_required(VERSION 2.8.11)
|
||||
cmake_policy(SET CMP0054 NEW)
|
||||
project(AliasTarget)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 98)
|
||||
|
@ -10,6 +11,12 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL HP AND
|
|||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -AA")
|
||||
endif ()
|
||||
|
||||
# Clang/C2 in C++98 mode cannot properly handle some of MSVC headers
|
||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
|
||||
CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
endif()
|
||||
|
||||
add_library(foo SHARED empty.cpp)
|
||||
add_library(PREFIX::Foo ALIAS foo)
|
||||
add_library(Another::Alias ALIAS foo)
|
||||
|
|
|
@ -1744,7 +1744,9 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release
|
|||
if(MSVC)
|
||||
ADD_TEST_MACRO(ForceInclude foo)
|
||||
ADD_TEST_MACRO(PDBDirectoryAndName myexe)
|
||||
ADD_TEST_MACRO(PrecompiledHeader foo)
|
||||
if(NOT CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
||||
ADD_TEST_MACRO(PrecompiledHeader foo)
|
||||
endif()
|
||||
endif()
|
||||
if(MSVC OR
|
||||
"${CMAKE_GENERATOR}" MATCHES "(MSYS|MinGW) Makefiles")
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
# A more complex test case
|
||||
#
|
||||
cmake_minimum_required(VERSION 2.4)
|
||||
cmake_policy(SET CMP0054 NEW)
|
||||
project (Complex)
|
||||
|
||||
# Test that renaming a built-in works when configured multiple times.
|
||||
|
@ -438,6 +439,12 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL HP AND
|
|||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -AA")
|
||||
endif ()
|
||||
|
||||
# Clang/C2 in C++98 mode cannot properly handle some of MSVC headers
|
||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
|
||||
CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
endif()
|
||||
|
||||
#
|
||||
# Create the libs and the main exe
|
||||
#
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
# A more complex test case
|
||||
#
|
||||
cmake_minimum_required(VERSION 2.4)
|
||||
cmake_policy(SET CMP0054 NEW)
|
||||
project (Complex)
|
||||
|
||||
# Try setting a new policy. The IF test is for coverage.
|
||||
|
@ -401,6 +402,12 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL HP AND
|
|||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -AA")
|
||||
endif ()
|
||||
|
||||
# Clang/C2 in C++98 mode cannot properly handle some of MSVC headers
|
||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
|
||||
CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
endif()
|
||||
|
||||
#
|
||||
# Create the libs and the main exe
|
||||
#
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
cmake_minimum_required(VERSION 2.8.5 FATAL_ERROR)
|
||||
cmake_policy(SET CMP0054 NEW)
|
||||
|
||||
project(GenerateExportHeader)
|
||||
|
||||
|
@ -66,6 +67,12 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL HP AND
|
|||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -AA")
|
||||
endif ()
|
||||
|
||||
# Clang/C2 in C++98 mode cannot properly handle some of MSVC headers
|
||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
|
||||
CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
endif()
|
||||
|
||||
add_subdirectory(lib_shared_and_static)
|
||||
|
||||
add_compiler_export_flags()
|
||||
|
@ -107,7 +114,10 @@ add_executable(GenerateExportHeader exportheader_test.cpp)
|
|||
|
||||
target_link_libraries(GenerateExportHeader ${link_libraries})
|
||||
if (WIN32 OR CYGWIN)
|
||||
if(MSVC AND COMPILER_HAS_DEPRECATED)
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
|
||||
CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
|
||||
set(_platform Win32-Clang)
|
||||
elseif(MSVC AND COMPILER_HAS_DEPRECATED)
|
||||
set(_platform Win32)
|
||||
elseif((MINGW OR CYGWIN) AND COMPILER_HAS_DEPRECATED)
|
||||
set(_platform MinGW)
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
|
||||
#ifndef LIBSHARED_EXPORT_H
|
||||
#define LIBSHARED_EXPORT_H
|
||||
|
||||
#ifdef LIBSHARED_STATIC_DEFINE
|
||||
# define LIBSHARED_EXPORT
|
||||
# define LIBSHARED_NO_EXPORT
|
||||
#else
|
||||
# ifndef LIBSHARED_EXPORT
|
||||
# ifdef libshared_EXPORTS
|
||||
/* We are building this library */
|
||||
# define LIBSHARED_EXPORT __declspec(dllexport)
|
||||
# else
|
||||
/* We are using this library */
|
||||
# define LIBSHARED_EXPORT __declspec(dllimport)
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# ifndef LIBSHARED_NO_EXPORT
|
||||
# define LIBSHARED_NO_EXPORT
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef LIBSHARED_DEPRECATED
|
||||
# define LIBSHARED_DEPRECATED __attribute__ ((__deprecated__))
|
||||
#endif
|
||||
|
||||
#ifndef LIBSHARED_DEPRECATED_EXPORT
|
||||
# define LIBSHARED_DEPRECATED_EXPORT LIBSHARED_EXPORT LIBSHARED_DEPRECATED
|
||||
#endif
|
||||
|
||||
#ifndef LIBSHARED_DEPRECATED_NO_EXPORT
|
||||
# define LIBSHARED_DEPRECATED_NO_EXPORT LIBSHARED_NO_EXPORT LIBSHARED_DEPRECATED
|
||||
#endif
|
||||
|
||||
#define DEFINE_NO_DEPRECATED 0
|
||||
#if DEFINE_NO_DEPRECATED
|
||||
# define LIBSHARED_NO_DEPRECATED
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,41 @@
|
|||
|
||||
#ifndef LIBSTATIC_EXPORT_H
|
||||
#define LIBSTATIC_EXPORT_H
|
||||
|
||||
#ifdef LIBSTATIC_STATIC_DEFINE
|
||||
# define LIBSTATIC_EXPORT
|
||||
# define LIBSTATIC_NO_EXPORT
|
||||
#else
|
||||
# ifndef LIBSTATIC_EXPORT
|
||||
# ifdef libstatic_EXPORTS
|
||||
/* We are building this library */
|
||||
# define LIBSTATIC_EXPORT
|
||||
# else
|
||||
/* We are using this library */
|
||||
# define LIBSTATIC_EXPORT
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# ifndef LIBSTATIC_NO_EXPORT
|
||||
# define LIBSTATIC_NO_EXPORT
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef LIBSTATIC_DEPRECATED
|
||||
# define LIBSTATIC_DEPRECATED __attribute__ ((__deprecated__))
|
||||
#endif
|
||||
|
||||
#ifndef LIBSTATIC_DEPRECATED_EXPORT
|
||||
# define LIBSTATIC_DEPRECATED_EXPORT LIBSTATIC_EXPORT LIBSTATIC_DEPRECATED
|
||||
#endif
|
||||
|
||||
#ifndef LIBSTATIC_DEPRECATED_NO_EXPORT
|
||||
# define LIBSTATIC_DEPRECATED_NO_EXPORT LIBSTATIC_NO_EXPORT LIBSTATIC_DEPRECATED
|
||||
#endif
|
||||
|
||||
#define DEFINE_NO_DEPRECATED 0
|
||||
#if DEFINE_NO_DEPRECATED
|
||||
# define LIBSTATIC_NO_DEPRECATED
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -1,4 +1,5 @@
|
|||
cmake_minimum_required(VERSION 2.8)
|
||||
cmake_policy(SET CMP0054 NEW)
|
||||
project(PDBDirectoryAndName C)
|
||||
|
||||
# Make sure the proper compiler is in use.
|
||||
|
@ -62,6 +63,14 @@ list(APPEND my_targets myexe2)
|
|||
|
||||
target_link_libraries(myexe2 mylibA mylibD)
|
||||
|
||||
|
||||
# Clang/C2 does not produce pdb files for static libraries
|
||||
if (CMAKE_C_COMPILER_ID STREQUAL "Clang" AND
|
||||
CMAKE_C_SIMULATE_ID STREQUAL "MSVC")
|
||||
list(REMOVE_ITEM my_targets mylibB mylibD)
|
||||
endif()
|
||||
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Check that PDB files actually appear where expected.
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
cmake_minimum_required (VERSION 2.6)
|
||||
cmake_policy(SET CMP0054 NEW)
|
||||
project(Plugin)
|
||||
|
||||
# Test per-target output directory properties.
|
||||
|
@ -34,6 +35,12 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL HP AND
|
|||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -AA")
|
||||
endif ()
|
||||
|
||||
# Clang/C2 in C++98 mode cannot properly handle some of MSVC headers
|
||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
|
||||
CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
endif()
|
||||
|
||||
# Create an executable that exports an API for use by plugins.
|
||||
add_executable(example_exe src/example_exe.cxx)
|
||||
set_target_properties(example_exe PROPERTIES
|
||||
|
|
Loading…
Reference in New Issue